From 83e0dfc21a267125e81423b56c77e70ed8059472 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Thu, 14 Mar 2024 23:29:18 +0100 Subject: [PATCH 01/16] Laravel 11 basic template --- .editorconfig | 10 +- .env.example | 63 +- .gitattributes | 14 +- .github/workflows/check-php.yml | 102 - .github/workflows/schedule-psalm.yaml | 61 - .styleci.yml | 13 - CHANGELOG.md | 274 - CONTRIBUTING.md | 70 - LICENSE.md | 21 - Makefile | 36 - Makefile.deploy | 64 - Makefile.param.dist | 7 - README.md | 174 +- app/Console/Commands/GenerateWorkflow.php | 314 - app/Console/Kernel.php | 40 - app/Exceptions/Handler.php | 42 - .../Controllers/ConfiguratorController.php | 19 - app/Http/Controllers/Controller.php | 11 +- app/Http/Controllers/DashboardController.php | 11 - app/Http/Kernel.php | 66 - app/Http/Livewire/ConfiguratorForm.php | 226 - app/Http/Livewire/Dashboard/Daily.php | 35 - app/Http/Livewire/Dashboard/Latest.php | 24 - app/Http/Livewire/Dashboard/Metrics.php | 46 - app/Http/Livewire/Dashboard/Top.php | 24 - app/Http/Middleware/Authenticate.php | 23 - app/Http/Middleware/EncryptCookies.php | 17 - .../PreventRequestsDuringMaintenance.php | 17 - .../Middleware/RedirectIfAuthenticated.php | 30 - app/Http/Middleware/TrimStrings.php | 19 - app/Http/Middleware/TrustHosts.php | 20 - app/Http/Middleware/TrustProxies.php | 28 - app/Http/Middleware/VerifyCsrfToken.php | 17 - .../Resources/ConfigurationCollection.php | 19 - app/Http/Resources/ConfigurationResource.php | 32 - app/Models/Configuration.php | 92 - app/Models/LogConfiguration.php | 13 - app/Models/User.php | 22 +- app/Objects/GuesserFiles.php | 236 - app/Objects/ReportExecution.php | 167 - app/Objects/WorkflowGenerator.php | 180 - app/Providers/AppServiceProvider.php | 13 +- app/Providers/AuthServiceProvider.php | 29 - app/Providers/BroadcastServiceProvider.php | 21 - app/Providers/EventServiceProvider.php | 32 - app/Providers/RouteServiceProvider.php | 66 - app/Providers/ViewServiceProvider.php | 23 - app/Traits/Form/BaseWorkflow.php | 214 - app/Traits/Form/CodeQuality.php | 98 - app/Traits/Form/Deploy.php | 60 - app/Traits/Form/LaravelStuff.php | 82 - app/View/Composers/AppDataComposer.php | 16 - artisan | 50 +- bootstrap/app.php | 69 +- bootstrap/providers.php | 5 + composer.json | 104 +- composer.lock | 11921 ++++++---------- config/app.php | 165 +- config/auth.php | 48 +- config/broadcasting.php | 64 - config/cache.php | 39 +- config/cors.php | 34 - config/database.php | 85 +- config/filesystems.php | 14 +- config/gh-action-yaml-generator.php | 9 - config/hashing.php | 52 - config/logging.php | 54 +- config/mail.php | 71 +- config/queue.php | 61 +- config/services.php | 13 +- config/session.php | 87 +- config/view.php | 36 - database/.gitignore | 3 +- database/factories/UserFactory.php | 31 +- .../0001_01_01_000000_create_users_table.php | 49 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 57 + .../2014_10_12_000000_create_users_table.php | 36 - ...12_100000_create_password_resets_table.php | 32 - ..._08_19_000000_create_failed_jobs_table.php | 36 - ..._10_203938_create_configurations_table.php | 35 - ...211200_create_log_configurations_table.php | 32 - database/seeders/DatabaseSeeder.php | 13 +- docker-compose.yml | 74 - exclude-list.txt | 107 - ...-github-actions-yaml-generator-laravel.png | Bin 109581 -> 0 bytes github-actions-generator-laravel.png | Bin 532654 -> 0 bytes github-workflow.json | 1335 -- package-lock.json | 2826 ---- package.json | 25 +- phpstan.neon | 12 - phpunit.xml | 32 +- pint.json | 3 - postcss.config.js | 6 - psalm.xml | 17 - ...-github-actions-yaml-generator-laravel.png | Bin 109581 -> 0 bytes public/ghygen-square.png | Bin 10018 -> 0 bytes public/ghygen-title.png | Bin 16234 -> 0 bytes public/index.php | 52 +- public/js/app.js.LICENSE.txt | 15 - public/sitemap.xml | 11 - public/web.config | 28 - resources/css/app.css | 25 - resources/js/app.js | 16 +- resources/js/bootstrap.js | 28 - resources/lang/en/auth.php | 20 - resources/lang/en/pagination.php | 19 - resources/lang/en/passwords.php | 22 - resources/lang/en/validation.php | 152 - resources/templates/json/laravelapp.json | 55 - resources/templates/json/laravelpackage.json | 56 - .../templates/json/laravelpostgresql.json | 55 - resources/templates/json/phppackage.json | 56 - resources/views/action_yaml.blade.php | 134 - resources/views/components/button.blade.php | 17 - .../views/components/card-template.blade.php | 30 - .../views/components/daisyui/button.blade.php | 21 - .../views/components/daisyui/header.blade.php | 21 - resources/views/components/footer.blade.php | 104 - .../components/form/input-checkbox.blade.php | 24 - .../form/input-conditional-checkbox.blade.php | 27 - .../components/form/input-select.blade.php | 34 - .../components/form/input-text.blade.php | 24 - .../views/components/icons/laravel.blade.php | 1 - .../views/components/icons/php.blade.php | 95 - .../views/components/separator-line.blade.php | 4 - .../views/components/table/link.blade.php | 5 - resources/views/components/table/td.blade.php | 7 - resources/views/components/table/th.blade.php | 7 - .../views/components/table/title.blade.php | 3 - resources/views/configurator/about.blade.php | 201 - resources/views/configurator/index.blade.php | 42 - resources/views/dashboard/index.blade.php | 56 - .../livewire/configurator-form.blade.php | 449 - .../views/livewire/dashboard/daily.blade.php | 37 - .../views/livewire/dashboard/latest.blade.php | 58 - .../livewire/dashboard/metrics.blade.php | 53 - .../views/livewire/dashboard/top.blade.php | 61 - .../livewire/form/code-quality.blade.php | 134 - .../views/livewire/form/deploy.blade.php | 52 - .../livewire/form/laravel-stuff.blade.php | 74 - resources/views/welcome.blade.php | 172 + resources/views/yaml/code_quality.blade.php | 90 - resources/views/yaml/deploy_forge.blade.php | 13 - resources/views/yaml/deploy_ploi.blade.php | 12 - resources/views/yaml/deploy_vapor.blade.php | 7 - resources/views/yaml/header.blade.php | 2 - resources/views/yaml/mysql_service.blade.php | 28 - resources/views/yaml/on.blade.php | 31 - .../views/yaml/postgresql_service.blade.php | 26 - resources/views/yaml/set_env.blade.php | 43 - routes/api.php | 19 - routes/channels.php | 18 - routes/console.php | 13 +- routes/web.php | 40 +- server.php | 19 - tailwind.config.js | 23 - tests/Browser/ExampleTest.php | 22 - tests/Browser/FormTest.php | 22 - tests/Browser/Pages/HomePage.php | 36 - tests/Browser/Pages/Page.php | 20 - tests/Browser/console/.gitignore | 2 - tests/Browser/screenshots/.gitignore | 2 - tests/CreatesApplication.php | 22 - tests/DuskTestCase.php | 48 - tests/Feature/DatabaseFormTest.php | 73 - tests/Feature/DeployTest.php | 25 - tests/Feature/ExampleTest.php | 7 + tests/Feature/PagesTest.php | 20 - tests/Feature/YamlFormTest.php | 248 - tests/Feature/mock-asserts/copy-env.yaml | 2 - tests/Feature/mock-asserts/forge-deploy.yaml | 13 - tests/Feature/mock-asserts/generate-key.yaml | 2 - tests/Feature/mock-asserts/mysql-service.yaml | 18 - .../on-push-branches-wildcard.yaml | 5 - .../mock-asserts/on-push-branches.yaml | 7 - tests/Feature/mock-asserts/phpcs-install.yaml | 4 - .../Feature/mock-asserts/phpcs-noinstall.yaml | 3 - tests/Feature/mock-asserts/phpcs-srcdir.yaml | 4 - .../mock-asserts/phpstan-conffile.yaml | 3 - .../Feature/mock-asserts/phpstan-install.yaml | 4 - .../mock-asserts/phpstan-noinstall.yaml | 3 - tests/Feature/mock-asserts/ploi-deploy.yaml | 6 - .../mock-asserts/postgresql-service.yaml | 18 - .../mock-asserts/sqlite-migration.yaml | 8 - .../mock-asserts/strategy-php-8-74.yaml | 10 - tests/Feature/mock-asserts/vapor-deploy.yaml | 6 - tests/Pest.php | 52 +- tests/TestCase.php | 2 +- tests/Unit/ExampleTest.php | 21 +- tests/Unit/GuesserTest.php | 49 - vite.config.js | 19 +- 192 files changed, 5511 insertions(+), 19366 deletions(-) delete mode 100644 .github/workflows/check-php.yml delete mode 100644 .github/workflows/schedule-psalm.yaml delete mode 100644 .styleci.yml delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE.md delete mode 100644 Makefile delete mode 100644 Makefile.deploy delete mode 100644 Makefile.param.dist delete mode 100644 app/Console/Commands/GenerateWorkflow.php delete mode 100644 app/Console/Kernel.php delete mode 100644 app/Exceptions/Handler.php delete mode 100644 app/Http/Controllers/ConfiguratorController.php delete mode 100644 app/Http/Controllers/DashboardController.php delete mode 100644 app/Http/Kernel.php delete mode 100644 app/Http/Livewire/ConfiguratorForm.php delete mode 100644 app/Http/Livewire/Dashboard/Daily.php delete mode 100644 app/Http/Livewire/Dashboard/Latest.php delete mode 100644 app/Http/Livewire/Dashboard/Metrics.php delete mode 100644 app/Http/Livewire/Dashboard/Top.php delete mode 100644 app/Http/Middleware/Authenticate.php delete mode 100644 app/Http/Middleware/EncryptCookies.php delete mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php delete mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php delete mode 100644 app/Http/Middleware/TrimStrings.php delete mode 100644 app/Http/Middleware/TrustHosts.php delete mode 100644 app/Http/Middleware/TrustProxies.php delete mode 100644 app/Http/Middleware/VerifyCsrfToken.php delete mode 100644 app/Http/Resources/ConfigurationCollection.php delete mode 100644 app/Http/Resources/ConfigurationResource.php delete mode 100644 app/Models/Configuration.php delete mode 100644 app/Models/LogConfiguration.php delete mode 100644 app/Objects/GuesserFiles.php delete mode 100644 app/Objects/ReportExecution.php delete mode 100644 app/Objects/WorkflowGenerator.php delete mode 100644 app/Providers/AuthServiceProvider.php delete mode 100644 app/Providers/BroadcastServiceProvider.php delete mode 100644 app/Providers/EventServiceProvider.php delete mode 100644 app/Providers/RouteServiceProvider.php delete mode 100644 app/Providers/ViewServiceProvider.php delete mode 100644 app/Traits/Form/BaseWorkflow.php delete mode 100644 app/Traits/Form/CodeQuality.php delete mode 100644 app/Traits/Form/Deploy.php delete mode 100644 app/Traits/Form/LaravelStuff.php delete mode 100644 app/View/Composers/AppDataComposer.php create mode 100644 bootstrap/providers.php delete mode 100644 config/broadcasting.php delete mode 100644 config/cors.php delete mode 100644 config/gh-action-yaml-generator.php delete mode 100644 config/hashing.php delete mode 100644 config/view.php create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php delete mode 100644 database/migrations/2014_10_12_000000_create_users_table.php delete mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php delete mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php delete mode 100644 database/migrations/2021_02_10_203938_create_configurations_table.php delete mode 100644 database/migrations/2021_03_03_211200_create_log_configurations_table.php delete mode 100644 docker-compose.yml delete mode 100644 exclude-list.txt delete mode 100644 ghygen-github-actions-yaml-generator-laravel.png delete mode 100644 github-actions-generator-laravel.png delete mode 100644 github-workflow.json delete mode 100644 package-lock.json delete mode 100644 phpstan.neon delete mode 100644 pint.json delete mode 100644 postcss.config.js delete mode 100644 psalm.xml delete mode 100644 public/ghygen-github-actions-yaml-generator-laravel.png delete mode 100644 public/ghygen-square.png delete mode 100644 public/ghygen-title.png delete mode 100644 public/js/app.js.LICENSE.txt delete mode 100644 public/sitemap.xml delete mode 100644 public/web.config delete mode 100644 resources/lang/en/auth.php delete mode 100644 resources/lang/en/pagination.php delete mode 100644 resources/lang/en/passwords.php delete mode 100644 resources/lang/en/validation.php delete mode 100644 resources/templates/json/laravelapp.json delete mode 100644 resources/templates/json/laravelpackage.json delete mode 100644 resources/templates/json/laravelpostgresql.json delete mode 100644 resources/templates/json/phppackage.json delete mode 100644 resources/views/action_yaml.blade.php delete mode 100644 resources/views/components/button.blade.php delete mode 100644 resources/views/components/card-template.blade.php delete mode 100644 resources/views/components/daisyui/button.blade.php delete mode 100644 resources/views/components/daisyui/header.blade.php delete mode 100644 resources/views/components/footer.blade.php delete mode 100644 resources/views/components/form/input-checkbox.blade.php delete mode 100644 resources/views/components/form/input-conditional-checkbox.blade.php delete mode 100644 resources/views/components/form/input-select.blade.php delete mode 100644 resources/views/components/form/input-text.blade.php delete mode 100644 resources/views/components/icons/laravel.blade.php delete mode 100644 resources/views/components/icons/php.blade.php delete mode 100644 resources/views/components/separator-line.blade.php delete mode 100644 resources/views/components/table/link.blade.php delete mode 100644 resources/views/components/table/td.blade.php delete mode 100644 resources/views/components/table/th.blade.php delete mode 100644 resources/views/components/table/title.blade.php delete mode 100644 resources/views/configurator/about.blade.php delete mode 100644 resources/views/configurator/index.blade.php delete mode 100644 resources/views/dashboard/index.blade.php delete mode 100644 resources/views/livewire/configurator-form.blade.php delete mode 100644 resources/views/livewire/dashboard/daily.blade.php delete mode 100644 resources/views/livewire/dashboard/latest.blade.php delete mode 100644 resources/views/livewire/dashboard/metrics.blade.php delete mode 100644 resources/views/livewire/dashboard/top.blade.php delete mode 100644 resources/views/livewire/form/code-quality.blade.php delete mode 100644 resources/views/livewire/form/deploy.blade.php delete mode 100644 resources/views/livewire/form/laravel-stuff.blade.php create mode 100644 resources/views/welcome.blade.php delete mode 100644 resources/views/yaml/code_quality.blade.php delete mode 100644 resources/views/yaml/deploy_forge.blade.php delete mode 100644 resources/views/yaml/deploy_ploi.blade.php delete mode 100644 resources/views/yaml/deploy_vapor.blade.php delete mode 100644 resources/views/yaml/header.blade.php delete mode 100644 resources/views/yaml/mysql_service.blade.php delete mode 100644 resources/views/yaml/on.blade.php delete mode 100644 resources/views/yaml/postgresql_service.blade.php delete mode 100644 resources/views/yaml/set_env.blade.php delete mode 100644 routes/api.php delete mode 100644 routes/channels.php delete mode 100644 server.php delete mode 100644 tailwind.config.js delete mode 100644 tests/Browser/ExampleTest.php delete mode 100644 tests/Browser/FormTest.php delete mode 100644 tests/Browser/Pages/HomePage.php delete mode 100644 tests/Browser/Pages/Page.php delete mode 100644 tests/Browser/console/.gitignore delete mode 100644 tests/Browser/screenshots/.gitignore delete mode 100644 tests/CreatesApplication.php delete mode 100644 tests/DuskTestCase.php delete mode 100644 tests/Feature/DatabaseFormTest.php delete mode 100644 tests/Feature/DeployTest.php create mode 100644 tests/Feature/ExampleTest.php delete mode 100644 tests/Feature/PagesTest.php delete mode 100644 tests/Feature/YamlFormTest.php delete mode 100644 tests/Feature/mock-asserts/copy-env.yaml delete mode 100644 tests/Feature/mock-asserts/forge-deploy.yaml delete mode 100644 tests/Feature/mock-asserts/generate-key.yaml delete mode 100644 tests/Feature/mock-asserts/mysql-service.yaml delete mode 100644 tests/Feature/mock-asserts/on-push-branches-wildcard.yaml delete mode 100644 tests/Feature/mock-asserts/on-push-branches.yaml delete mode 100644 tests/Feature/mock-asserts/phpcs-install.yaml delete mode 100644 tests/Feature/mock-asserts/phpcs-noinstall.yaml delete mode 100644 tests/Feature/mock-asserts/phpcs-srcdir.yaml delete mode 100644 tests/Feature/mock-asserts/phpstan-conffile.yaml delete mode 100644 tests/Feature/mock-asserts/phpstan-install.yaml delete mode 100644 tests/Feature/mock-asserts/phpstan-noinstall.yaml delete mode 100644 tests/Feature/mock-asserts/ploi-deploy.yaml delete mode 100644 tests/Feature/mock-asserts/postgresql-service.yaml delete mode 100644 tests/Feature/mock-asserts/sqlite-migration.yaml delete mode 100644 tests/Feature/mock-asserts/strategy-php-8-74.yaml delete mode 100644 tests/Feature/mock-asserts/vapor-deploy.yaml delete mode 100644 tests/Unit/GuesserTest.php diff --git a/.editorconfig b/.editorconfig index c578a8f..8f0de65 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,16 +3,16 @@ root = true [*] charset = utf-8 end_of_line = lf -insert_final_newline = true -indent_style = space indent_size = 4 +indent_style = space +insert_final_newline = true trim_trailing_whitespace = true -[*.blade.php] -indent_size = 2 - [*.md] trim_trailing_whitespace = false [*.{yml,yaml}] indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example index 5d80058..7b49625 100644 --- a/.env.example +++ b/.env.example @@ -1,49 +1,64 @@ -APP_NAME=LaravelGitHubActionsYamlGenerator +APP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true -APP_URL=http://127.0.0.1:8000 +APP_TIMEZONE=UTC +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +APP_MAINTENANCE_STORE=database + +BCRYPT_ROUNDS=12 LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= - -BROADCAST_DRIVER=log -CACHE_DRIVER=file -QUEUE_CONNECTION=sync -SESSION_DRIVER=file +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= + +SESSION_DRIVER=database SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +CACHE_PREFIX= MEMCACHED_HOST=127.0.0.1 +REDIS_CLIENT=phpredis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 -MAIL_MAILER=smtp -MAIL_HOST=mailhog -MAIL_PORT=1025 +MAIL_MAILER=log +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS=null +MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_APP_CLUSTER=mt1 - -MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +VITE_APP_NAME="${APP_NAME}" diff --git a/.gitattributes b/.gitattributes index 967315d..fcb21d3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,11 @@ -* text=auto -*.css linguist-vendored -*.scss linguist-vendored -*.js linguist-vendored +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.github/workflows/check-php.yml b/.github/workflows/check-php.yml deleted file mode 100644 index 815c65f..0000000 --- a/.github/workflows/check-php.yml +++ /dev/null @@ -1,102 +0,0 @@ -# GithHub Actions Workflow generated with Ghygen -name: Code Quality -on: - push: - branches: - - main - - develop - - features/** - - feature/** - -jobs: - laravel-tests: - runs-on: ubuntu-latest - # Service container Mysql mysql - services: - # Label used to access the service container - mysql: - # Docker Hub image (also with version) - image: mysql:latest - env: - MYSQL_ALLOW_EMPTY_PASSWORD: yes - MYSQL_DATABASE: db_test_laravel - ## map the "external" 33306 port with the "internal" 3306 - ports: - - 33306:3306 - # Set health checks to wait until mysql database has started (it takes some seconds to start) - options: >- - --health-cmd="mysqladmin ping" - --health-interval=10s - --health-timeout=5s - --health-retries=3 - - strategy: - matrix: - operating-system: [ubuntu-latest, windows-latest] - php-versions: [ '8.1', '8.2' ] - exclude: - - operating-system: windows-latest - php-versions: 8.1 - - name: PHP ${{ matrix.php-versions }} - OS ${{ matrix.operating-system}} - - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18.x' - - name: Install NPM packages - run: npm ci - - name: Build frontend - run: npm run build - - name: Install PHP versions - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - - name: Copy .env - run: php -r "file_exists('.env') || copy('.env.example', '.env');" - - name: Install Dependencies - if: steps.vendor-cache.outputs.cache-hit != 'true' - run: composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - - - - name: Generate key - run: php artisan key:generate - - name: Directory Permissions - run: chmod -R 777 storage bootstrap/cache - - name: Run Migrations - # Set environment - env: - DB_CONNECTION: mysql - DB_DATABASE: db_test_laravel - DB_PORT: 33306 - DB_USER: root - - run: php artisan migrate - - - name: Show dir - run: pwd - - name: PHP Version - run: php --version - - # Code quality - - name: Execute tests (Unit and Feature tests) via PHPUnit - # Set environment - env: - DB_CONNECTION: mysql - DB_DATABASE: db_test_laravel - DB_PORT: 33306 - DB_USER: root - - run: composer test - - - - - name: Execute Code Sniffer via Pint - run: | - composer cs - - - name: Execute Code Static Analysis (PHP Stan + Larastan) - run: | - composer phpstan diff --git a/.github/workflows/schedule-psalm.yaml b/.github/workflows/schedule-psalm.yaml deleted file mode 100644 index 30c1fbe..0000000 --- a/.github/workflows/schedule-psalm.yaml +++ /dev/null @@ -1,61 +0,0 @@ -# GithHub Actions Workflow generated with Ghygen -# Original configuration: http://gh-actions-yaml-generator.test?code=6ce68f1bde02c4ee1c54c18d4c3e91de -name: Scheduled Psalm and security -on: - push: - branches: - - tests/** - -jobs: - laravel-tests: - runs-on: ubuntu-latest - - strategy: - matrix: - operating-system: [ubuntu-latest] - php-versions: [ '8.0' ] - dependency-stability: [ 'prefer-none' ] - - name: P${{ matrix.php-versions }} - L${{ matrix.laravel }} - ${{ matrix.dependency-stability }} - ${{ matrix.operating-system}} - - steps: - - uses: actions/checkout@v3 - - name: Install PHP versions - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - - name: Copy .env - run: php -r "file_exists('.env') || copy('.env.example', '.env');" - - name: Install Dependencies - if: steps.vendor-cache.outputs.cache-hit != 'true' - run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - - - name: Update Dependencies with latest stable - if: matrix.dependency-stability == 'prefer-stable' - run: composer update --prefer-stable - - name: Update Dependencies with lowest stable - if: matrix.dependency-stability == 'prefer-lowest' - run: composer update --prefer-stable --prefer-lowest - - - name: Generate key - run: php artisan key:generate - - - name: Show dir - run: pwd - - name: PHP Version - run: php --version - - # Code quality - - - - uses: symfonycorp/security-checker-action@v4 - - - - name: Execute Code Static Analysis (PSALM) - run: | - vendor/bin/psalm --report=result.sarif - - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v2 - with: - # Path to SARIF file relative to the root of the repository - sarif_file: result.sarif diff --git a/.styleci.yml b/.styleci.yml deleted file mode 100644 index 9231873..0000000 --- a/.styleci.yml +++ /dev/null @@ -1,13 +0,0 @@ -php: - preset: laravel - disabled: - - no_unused_imports - finder: - not-name: - - index.php - - server.php -js: - finder: - not-name: - - webpack.mix.js -css: true diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 7fadf5d..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,274 +0,0 @@ -# Changelog - -## 0.7.0 - 2023-02-19 - -- Added Laravel 10 options for using L10 in the GitHub Actions workflows -- Upgrading Actions: - - actions/checkout@v3 - - actions/setup-node@v3 - - github/codeql-action/upload-sarif@v2 - - symfonycorp/security-checker-action@v4 - - webfactory/ssh-agent@v0.7.0 -- Introducing Laravel Pint -- Introducing PestPHP -- Converting Feature tests for PestPHP, thanks to @dansysanalyst for #151 -- Using composer scripts for executing code quality tools - -## 0.6.2 - 2022-12-20 -- PHPStan Level 6 -- Support for PHP 8.2 - -## 0.6.1 - 2022-04-17 -- added php8.1 for auto-detecting php version for matrix -- added make install command by @AlessandroMinoccheri -- fix load template for matrixTestbenchDependencies - -## 0.6.0 - 2022-04-13 -- upgrade to Laravel 9 framework - -## 0.5.2 - 2022-04-12 -- added laravel 9 mapping for testbench, thanks to @dkemper -- improve dark/light mode -- update npm packages - -## 0.5.1 - 2021-11-27 -Welcome PHP 8.1 -- update GitHub actions workflows for 8.1 -- add option for 8.1 in the UI - -## 0.5.0 - 2021-11-21 -- Now you can **deploy with Forge** with your CI workflow -- **UI refactoring**: Introducing DaisyUI components -- **Report** for command line execution -- Upgrade to **PHPstan 1** -- Command line: added --dry-run option -- Now is possible to **install Ghygen** with composer create-project hi-folks/ghygen - - -## 0.4.6 - 2021-10-23 -It's still Hacktoberfest! -- Welcome to PHP 8.1, you can select PHP8.1 (experimental) to check the compatibility of your application in CICD - -## 0.4.5 - 2021-10-22 -It's still Hacktoberfest! -- You can schedule a workflow to run at specific UTC times using POSIX cron syntax; -- Security check - -## 0.4.4 - 2021-10-21 -It's still Hacktoberfest! -- Welcome --save option for CLI (you can define the filename of the workflow file); -- Set automatically the workflow filename for auto generation (to much automation ;) with --save=auto option -- Twitter card :) - -## 0.4.3 - 2021-10-19 -It is still Hacktoberfest! -- Psalm, create Sarif report for GitHub code scanning integration -- update to Alpinejs 3 -- Allow user to set dependency stability (none, the latest stable, the lowest stable), thanks to @marulitua -- Phpstan Level 6 (from 5 to 6, report missing typehints) - -## 0.4.2 - 2021-10-12 -Hacktoberfest, goes on... -- Updated Cover image -- Using phpstan.neon file, thanks to @ActuallyConnor -- autodetect usage of phpstan.neon from command line -- better management of title and description in meta html tags. Thanks to @zaratedev - - -## 0.4.1 - 2021-10-03 -It is time for Hacktoberfest!!! -- With template laravelpackage (no composer.lock), avoid cache vendors and cache package. Thanks to @hetpatel33 for the hacktoberfest contribution; -- Update PHP packages, also [Laralens 0.2.6](https://github.com/Hi-Folks/lara-lens); -- Update contributing file for new contributors. -- -## 0.4.0 - 2021-09-15 -- Add command to generate automatically GitHub Actions workflow from composer.json, .env, migrations, packages.json - -## 0.3.7 - 2021-08-11 - -- Add launching tests via PestPHP - -## 0.3.6 - 2021-06-13 - -### Add -- Deploy Serverless Application via Vapor - -## 0.3.5 - 2021-05-17 - -### Add -- Deploy step with Ploi service. Thank you to @ashwind-19 - -## 0.3.4 - 2021-05-13 - -### Add -- Add wildcard for branch names -### Change -- Psalm fix MissingReturnType,MissingParamType -- clean up developments stuff after deploy -- cleaning some test workflows for GitHub Actions - -## 0.3.3 - 2021-04-24 - -### Add -- Psalm as Static Code Analysis Tool -- Add composer install --no-dev before deploy - -## 0.3.2 - 2021-04-22 - -### Add -- Postgresql template option - -### Change -- Update some style (template cards and header) - -## 0.3.1 - 2021-04-18 - -### Change -- Update default Node version to 15.x (stable) -- Fix some typos in the help labels in the Form -- Upgraded Node packages - -## 0.3.0 - 2021-04-15 - -### Add -- Select Template option: Laravel application, PHP package, Laravel package ( #62 ); -- Select tool for code static analysis ( #63 ) - - -## 0.2.5 - 2021-04-12 - -### Add -- New option for installing phpstan in workflow -- New option for installing phpcs in workflow -- New option for defining directory to check for phpcs ("app" default ) -- New option for defining directory to check for phpstan ("app" default) -- New option for execute (or not) 'php artisan key:generate' -- New option for copying .env template -- Install Phpstan and phpcs as composer dev - -### Change -- Upgrade PHP packages - - -## 0.2.4 - 2021-04-05 - -### Add -- Add Postgresql database - -### Change -- Fix Dashboard when some old data is loaded (isMysqlService vs dataType) - -## 0.2.3 - 2021-04-04 - -### Add -- Add Sqlite (in memory) support in your workflow (now the user can select: none, mysql or sqlite); -- Add Validation for Laravel version - - -## 0.2.2 - 2021-03-07 - -### Add -- All Hashcode configurations are logged into log_configurations table; -- Dashboard: Show the total configurations created daily; -- Add About page with /about URL. - -### Change -- Dashboard: sort latest configurations by updated_at. - -## 0.2.1 - 2021-02-26 -### Add -- Add API for listing configurations -- Add Dashboard for showing some infos from configurations - -## 0.2.0 - 2021-02-15 -### Add -- Add permalink to load saved configuration -- Add Makefile for deploy -- Add check for Rate Limit https://github.com/danharrin/livewire-rate-limiting -- Add LaraLens package https://github.com/Hi-Folks/lara-lens -### Change -- Use database migrations in tests -- Change Demo URL: https://ghygen.hi-folks.dev/ -- optimize js code after submit form - -## 0.1.8 - 2021-02-06 -### Add -- Caching node_modules directory when npm build is selected -- add check for on events (just to avoid a mix of manual/automatic behaviour) - -## 0.1.7 - 2021-02-05 -### Add -- Validation for some mandatory fields like name, "on events"; -- Conditional validation for some mandatory fields that depend on a check (, branches if "On" event is selected, mysql parameter if Mysql service is selected); -- Add Makefile for development. -- Add Hints / Suggestions - -## 0.1.6 - 2021-01-31 -### Add -- Add Laravel Matrix (for Laravel 8, Laravel 7 and Laravel 6) -- Add caching Schema Yaml file (to improve the speed during Yaml checks) - -## 0.1.5 - 2021-01-23 -### Add -- Add syntax highlight for Yaml workflow file -- Add copy button. ONce the Yaml is generated, you can click Copy Button in order to copy in the clipboard the content (so you can paste in your .github/workflows/*.yml file) -- Add Open Graph meta in the main page -- Add Larastan for phpstan, for a better compatibility with Laravel for static code analysis - -### Change -- fix margin and padding for checkboxes -- change input colors, from indigo to blue -- Fix load env parameters (load DB_ parameters only if database is needed) -- Fix Chrome driver version for Browser Tests (Laravel Dusk) - -## 0.1.4 - 2021-01-15 -### Add -- new .env parameter for forcing HTTPS for assets: APP_FORCE_HTTPS; -- using Larastan (to enhance the compatibility for phpstan with Laravel) -- adding check for Laravel Dusk, so your workflow can launch browser test directly in the CICD - - -## 0.1.3 - 2021-01-07 -### Add -- Validate Yaml file generated -- Show errors if there is some syntax error in Yaml file - -### Change -- red background if some error happens during the generation of Yaml file - - -## 0.1.2 - 2021-01-05 -### Add -- Tests execution (via phpunit) -- Code Sniffer (via phpcs) -- Static Analysis (via phpstan) -- Select Mysql Password: skip / from secret / hardcoded -- Run migrations (php artisan migrate) -- Nodejs setup (optional) -- Npm packages installation -- Caching Npm packages - -### Change -- fix array/string conversion for branches - - -## 0.1.1 (Proof of Concept) - 2021-01-03 - -### Change -- MYSQL_ALLOW_EMPTY_PASSWORD for mysql container service -- use features/** for triggering actions on push event -- fix indent _jobs_ in yaml file - -## 0.1.0 (Proof of Concept) - 2021-01-03 - -### Add -- initial release -- Collect some parameters about: - - name of workflow; - - "On" (events that trigger the workflow); - - setup mysql service container; - - Caching vendors and packages; - - select PHP versions; - - select NodeJs version (for npm build); - - some specific Laravel stuff (.env file, fix storage permissions). -- Generate Yaml file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index d55b425..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,70 +0,0 @@ -# Contributing - -Contributions are **welcome** and will be fully **credited**. - -Please read and understand the contribution guide before creating an issue or pull request. - -## Etiquette - -This project is open source, and as such, the maintainers give their free time to build and maintain the source code -held within. They make the code freely available in the hope that it will be of use to other developers. It would be -extremely unfair for them to suffer abuse or anger for their hard work. - -Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the -world that developers are civilized and selfless people. - -It's the duty of the maintainer to ensure that all submissions to the project are of sufficient -quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used. - -## Viability - -When requesting or submitting new features, first consider whether it might be useful to others. Open -source projects are used by many developers, who may have entirely different needs to your own. Think about -whether or not your feature is likely to be used by other users of the project. - -## Procedure - -Before filing an issue: - -- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident. -- Check to make sure your feature suggestion isn't already present within the project. -- Check the pull requests tab to ensure that the bug doesn't have a fix in progress. -- Check the pull requests tab to ensure that the feature isn't already in progress. - -Before submitting a pull request: - -- Check the codebase to ensure that your feature doesn't already exist. -- Check the pull requests to ensure that another person hasn't already submitted the feature or fix. - -## Open a Pull Request - -In order to maintain consistency in the source code we are following PSR12 coding standard, and using PHP stan for static code analysis. -You can use the command: - -```bash -composer all -``` - - -to launch -- **[Laravel Coding Standard](https://github.com/laravel/pint/blob/main/resources/presets/laravel.php)**, under the hood is used [Laravel Pint](https://github.com/laravel/pint); -- **PHPstan** with [level 6](https://phpstan.org/user-guide/rule-levels) -- **PestPHP** to execute all tests from ./tests/* - -I suggest to launch *composer all* before to commit or before to create PR. - -If you want to work on a PR, I suggest you to creating a new branch starting from **develop branch**, and use it also when you will submit your new **P**ull **R**equest on the original repository. - -If you want to contribute with an high quality PR, I suggest you to focus not just on the source code but also: - -- **Add tests!** - Your patch won't be accepted if it doesn't have tests. - -- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. - -- **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option. - -- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. - -- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. - -**Happy coding**! diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index f50012b..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Roberto Butti - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 5271f7c..0000000 --- a/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -.PHONY : help phpstan test coverage phpcs psalm -.DEFAULT_GOAL:=help - -help: ## Show this help. - @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//' - -phpstan: ## Execute phpstan - composer phpstan - -psalm: ## execute psalm - vendor/bin/psalm - -test: ## Execute phpunit - composer test - -coverage: ## Execute the coverage test - composer test - -phpcs: ## execute phpcs - composer cs - -phpfix: ## Fix some warnings from phpcs - vendor/bin/phpcbf --standard=PSR12 app - git commit -m "Auto Fix PSR12 Style" . - -allcheck: phpcs phpstan test ## it performs all check (phpcs, phpstan, tests) - -push: allcheck ## It performs all check and then git push on the current branch - git push origin HEAD - -install: ## executes composer install, key:generate and npm install - cp .env.example .env - composer install - php artisan key:generate - npm i - npm run production diff --git a/Makefile.deploy b/Makefile.deploy deleted file mode 100644 index b8ddf2e..0000000 --- a/Makefile.deploy +++ /dev/null @@ -1,64 +0,0 @@ -.PHONY: help - -include Makefile.param.prod - - - - -all: help - - -help: - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' - - -remotedu: ## Execute DU command in htdocs dir, just for diagnostic purpose - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; du -h" - -rsynca: ## execute Rsync from current dir and remote htdocs ${WEB_DIR} - rsync ${DRY_RUN} -rlcgoDvzi -e "ssh" --delete . ${SSH_ALIAS}:${WEB_DIR} --exclude-from 'exclude-list.txt' - - -copyenvprod: - scp .env.prod ${SSH_ALIAS}:${WEB_DIR}/.env - -fixgroupuser: ## Add the right group(www) to the deploy user (ssh user) - ssh -t ${SSH_ALIAS} "sudo usermod -a -G ${WEB_GROUP} ${SSH_USER}" - -fixownership: ## fix the ownership for user ${WEB_USER} into ${WEB_DIR}/storage - ssh -t ${SSH_ALIAS} "sudo chown -R ${WEB_USER}:${WEB_GROUP} ${WEB_DIR}/storage; ls -lao ${WEB_DIR}/storage" - - - -newdeploy: buildfrontend rsynca copyenvprod fixgroupuser fixownership migrate ##first deploy - -migratestatus: ## list the migration status - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate:status --env=prod" - -migrate: ## Execute migrate command for DB schema - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate --env=prod" - -migrateseed: ## Execute migrate command for DB schema - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate:refresh --seed --env=prod" - -migraterefresh: ## Execute migrate command for DB schema - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate:refresh" - -buildfrontend: ## execute npm task to compile frontend assets (js and css...) - npm run build - -optimize: ## Optimize application in production - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan config:cache; php artisan route:cache; php artisan view:cache" - -laralens: ## Execute Diagnostic on the server - ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan laralens:diagnostic" - -composerinstallnodev: - composer install --no-dev - -installdevdeps: - composer install - npm run dev - php artisan config:clear - -deploy: buildfrontend composerinstallnodev rsynca copyenvprod migrate installdevdeps diff --git a/Makefile.param.dist b/Makefile.param.dist deleted file mode 100644 index d643750..0000000 --- a/Makefile.param.dist +++ /dev/null @@ -1,7 +0,0 @@ -SSH_ALIAS=some.vm -SSH_USER=deploy -WEB_DIR=/var/www/htdocs/laravel8 -WEB_USER=www-data -WEB_GROUP=www-data -# DRY_RUN=--dry-run -DRY_RUN= diff --git a/README.md b/README.md index d6af2f5..1a4c26b 100644 --- a/README.md +++ b/README.md @@ -1,108 +1,66 @@ -![GitHub Workflow Status (main branch)](https://img.shields.io/github/actions/workflow/status/Hi-Folks/gh-actions-yaml-generator/check-php.yml?branch=main&style=for-the-badge) -![GitHub release (latest by date)](https://img.shields.io/github/v/release/Hi-Folks/gh-actions-yaml-generator?style=for-the-badge) -![Website](https://img.shields.io/website?label=Demo%20Site&style=for-the-badge&url=https%3A%2F%2Fghygen.hi-folks.dev%2F) - -![Ghygen](ghygen-github-actions-yaml-generator-laravel.png "Ghygen") - -# Ghygen -__Ghygen__ is a GitHub actions Yaml Generator. - -__Ghygen__ allows you creating your __Yaml__ file for __GitHub Actions__, for Laravel/PHP web application, so you can: - -- select triggering events: manually or automatically, when the developer _push_ the code on a specific branch, or a developer create a new _Pull Request_; -- select branches; -- enable caching for all vendors; -- enable __caching__ PHP packages; -- select __multiple__ PHP versions (8.2, 8.1, 8.0, 7.4); -- select __multiple Laravel__ versions (10, 9, 8, 7, 6), useful if you are developing a Laravel Package and you want to test it with multiple Laravel version; -- select __Node__ version for NPM (executing scripts via `npm run`); -- caching node packages; -- setup __Mysql__ Database service; -- setup __PostgreSQL__ Database service; -- setup __Sqlite__ in memory database; -- run migrations; -- __execute tests__ via phpunit; -- __execute tests__ via PestPHP; -- static __code analysis__ with phpstan or psalm; -- create Sarif report (with Psalm) for __GitHub integration with code scanning__; -- code sniffer (via phpcs for __PSR12__ compatibility); -- __validate Yaml__ file; -- execute __Browser Test__ via Laravel Dusk. -- Run __Deployments__ via Ploi using [Ploi Deploy Action](https://github.com/Glennmen/ploi-deploy-action). - -This is a Work In Progress, we are adding new features... - -If you want to test and use quickly this tool, I deployed the codebase (main branch) on Digital Ocean Platform: - -- [Ghygen Demo](https://ghygen.hi-folks.dev/). - -If you want to start using it locally you can clone the repo and install it following the instructions below. - -## Command line -Experimental and "magical" feature: Ghygen ships also a command for generating **automatically** a GitHub Actions workflow Yaml file. -You can install Gygen as project with composer: -```shell -composer create-project hi-folks/ghygen -cd ghygen -``` -Once you installed Ghygen, you can execute: -```shell -php artisan ghygen:generate --projectdir=../otherproject -``` -Where "../otherproject" is the directory (absolute or relative path name) with your Laravel project (application or package) that yuo want to automatically generate the GitHub Actions workflow yaml file. -This "magic" command, will extract information from: -- composer.json -- package.json (if it exists) -- .env file -- ... and other assets -- in order to guess a configuration for your GitHub Actions workflow. - -By default the command will show the Yaml workflow file in the standard output. If you want to save it in a file for example "my-workflow.yml" you can use --save option: -```shell -php artisan ghygen:generate --save=my-workflow.yml -``` - -If you want to autogenerate Yaml file in the .github/workflows directory use --save=auto -```shell -php artisan ghygen:generate --save=auto -``` -The file name will be created with the name found in composer.json (slugified). - -So if you are *superlazy* and want to generate the workflow for the project in the directory ../myproject , you can execute: -```shell -php artisan ghygen:generate --projectdir=../myproject/ --save=auto -``` - - -## Install -Clone source code, enter the new directory and perform a couple of instructions: -```shell -git clone https://github.com/Hi-Folks/gh-actions-yaml-generator.git -cd gh-actions-yaml-generator -make install -``` -Then create your database and update the .env file with the right values for DB_* . - -Once your Database is configured you can execute the migrations: -```shell -php artisan migrate -``` -Start development server -```shell -php artisan serve -``` -Open the browser to the URL: http://127.0.0.1:8000 - -## Usage -Follow these steps: -- access to the form (by default the URL is http://127.0.0.1:8000 if you run php artisan serve); -- fill the form; -- click on "Generate Yaml File" button. - -![github-actions-generator-laravel](github-actions-generator-laravel.png "github-actions-generator-laravel") - -Next, copy the content of your generated Yaml in a new file in your Laravel project _.github/workflows/laravel_workflow.yaml_ . - -Commit and push the new file. - -If you configured "On - Push" you will see the running Actions in your Actions section of your GitHub project. +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[WebReinvent](https://webreinvent.com/)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Jump24](https://jump24.co.uk)** +- **[Redberry](https://redberry.international/laravel/)** +- **[Active Logic](https://activelogic.com)** +- **[byte5](https://byte5.de)** +- **[OP.GG](https://op.gg)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Console/Commands/GenerateWorkflow.php b/app/Console/Commands/GenerateWorkflow.php deleted file mode 100644 index 2a0d57a..0000000 --- a/app/Console/Commands/GenerateWorkflow.php +++ /dev/null @@ -1,314 +0,0 @@ -line(str_pad('', strlen($title) + 12, '*'), 'info'); - $this->line('*** '.$title.' ***', 'info'); - $this->line(str_pad('', strlen($title) + 12, '*'), 'info'); - $this->newLine(); - $this->line('For auto generating the GitHub Actions Workflow,'); - $this->line("I'm going to analyze the project requirements..."); - $this->newLine(); - } - - /** - * Execute the console command. - * - * @return mixed - */ - public function handle() - { - $reportExecution = new ReportExecution(); - $this->saveFile = false; - $dryRun = $this->option('dry-run'); - $projectdir = $this->option('projectdir'); - if (is_null($projectdir)) { - $projectdir = ''; - } else { - $projectdir = rtrim($projectdir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; - } - $yamlFile = $this->option('save'); - $this->saveFile = ! is_null($yamlFile); - if ($this->saveFile) { - if ($yamlFile === 'auto') { - $yamlFile = GuesserFiles::generateYamlFilename(GuesserFiles::getGithubWorkflowDirectory($projectdir)); - } - if (file_exists($yamlFile)) { - $this->alert('File '.$yamlFile.' exists'); - - return; - } - } - - $cache = $this->option('cache'); - $optionEnvWorkflowFile = $this->option('envfile'); - - $guesserFiles = new GuesserFiles(); - $guesserFiles->pathFiles($projectdir, $optionEnvWorkflowFile); - - //$this->line("Composer : " . $guesserFiles->getComposerPath()); - if (! $guesserFiles->composerExists()) { - $this->error('Composer file not found'); - - return -1; - } - - $generator = new WorkflowGenerator(); - $generator->loadDefaults(); - - if ($guesserFiles->composerExists()) { /** @phpstan-ignore-line */ - $reportExecution->addValueInfo('Composer file', 'Loaded'); - $composer = json_decode(file_get_contents($guesserFiles->getComposerPath()), true); - $generator->name = Arr::get($composer, 'name', ''); - $reportExecution->addValueInfo('Project name', $generator->name); - $yamlFile = GuesserFiles::generateYamlFilename( - GuesserFiles::getGithubWorkflowDirectory($projectdir), - $generator->name - ); - - $phpversion = Arr::get($composer, 'require.php', '8.0'); - - $stepPhp = $generator->detectPhpVersion($phpversion); - $reportExecution->addValueInfo('PHP versions', $stepPhp); - - $optionPreferSelected = $this->option('prefer-stable') || $this->option('prefer-lowest'); - if ($this->option('prefer-stable') && $this->option('prefer-lowest')) { - $generator->dependencyStability = ['prefer-stable', 'prefer-lowest']; - } elseif ($this->option('prefer-lowest')) { - $generator->dependencyStability = ['prefer-lowest']; - } elseif ($this->option('prefer-stable')) { - $generator->dependencyStability = ['prefer-stable']; - } else { - $generator->dependencyStability = ['prefer-none']; - } - if ($optionPreferSelected) { - $reportExecution->addValueInfo('Dependency stability', $generator->dependencyStability); - } else { - $reportExecution->addValueComment('Dependency stability', 'Not selected'); - } - - // detect packages - $devPackages = Arr::get($composer, 'require-dev'); - // testbench - $testbenchVersions = Arr::get($devPackages, 'orchestra/testbench', ''); - if ($testbenchVersions !== '') { - $laravelVersions = GuesserFiles::detectLaravelVersionFromTestbench($testbenchVersions); - $generator->matrixLaravel = true; - $generator->matrixLaravelVersions = $laravelVersions; - $reportExecution->addValueInfo('Laravel versions', $laravelVersions); - } else { - $reportExecution->addValueComment('Laravel', 'No testbench detected'); - } - // squizlabs/php_codesniffer - $phpCodesniffer = Arr::get($devPackages, 'squizlabs/php_codesniffer', ''); - if ($phpCodesniffer !== '') { - $generator->stepExecuteCodeSniffer = true; - $generator->stepInstallCodeSniffer = false; - $reportExecution->addValueInfo('Code sniffer', 'Detected'); - } else { - $reportExecution->addValueComment('Code sniffer', 'Not detected'); - } - // nunomaduro/larastan - $larastan = Arr::get($devPackages, 'nunomaduro/larastan', ''); - if ($larastan !== '') { - $generator->stepExecuteStaticAnalysis = true; - $generator->stepInstallStaticAnalysis = false; - $generator->stepToolStaticAnalysis = 'larastan'; - $generator->stepPhpstanUseNeon = $guesserFiles->phpstanNeonExists(); - $reportExecution->addValueInfo('Static code analysis', 'Larastan and PHPStan'); - } else { - $phpstan = Arr::get($devPackages, 'phpstan/phpstan', ''); - if ($phpstan !== '') { - $generator->stepExecuteStaticAnalysis = true; - $generator->stepInstallStaticAnalysis = false; - $generator->stepToolStaticAnalysis = 'phpstan'; - $generator->stepPhpstanUseNeon = $guesserFiles->phpstanNeonExists(); - $reportExecution->addValueInfo('Static code analysis', 'PHPStan'); - } else { - $reportExecution->addValueComment('Static code analysis', 'Not detected'); - } - } - $generator->stepDusk = false; - // phpunit/phpunit - $generator->stepExecutePhpunit = false; - $phpunit = Arr::get($devPackages, 'phpunit/phpunit', ''); - if ($phpunit !== '') { - $generator->stepExecutePhpunit = true; - $reportExecution->addValueInfo('Automated test', 'PHPUnit'); - } - // phpunit/phpunit - $generator->stepExecutePestphp = false; - $pestphp = Arr::get($devPackages, 'pestphp/pest', ''); - if ($pestphp !== '') { - $generator->stepExecutePestphp = true; - $reportExecution->addValueInfo('Automated test', 'PestPHP'); - } - if ($pestphp === '' && $phpunit === '') { - $reportExecution->addValueComment('Automated test', 'Not detected'); - } - } else { - $reportExecution->addValueComment('Composer file', 'not found'); - } - - $generator->detectCache($cache); - if ($cache) { - $reportExecution->addValueInfo('Caching packages', 'Yes cache'); - } else { - $reportExecution->addValueComment('Caching packages', 'No cache'); - } - - $generator->databaseType = WorkflowGenerator::DB_TYPE_NONE; - $generator->stepRunMigrations = false; - - if ($guesserFiles->envExists()) { - $envArray = $generator->readDotEnv($guesserFiles->getEnvPath()); - $databaseType = Arr::get($envArray, 'DB_CONNECTION', ''); - - $generator->databaseType = WorkflowGenerator::DB_TYPE_NONE; - $generator->stepRunMigrations = false; - if ($databaseType === 'mysql') { - $generator->databaseType = WorkflowGenerator::DB_TYPE_MYSQL; - $reportExecution->addValueInfo('Database', 'Mysql service'); - } - if ($databaseType === 'sqlite') { - $generator->databaseType = WorkflowGenerator::DB_TYPE_SQLITE; - $reportExecution->addValueInfo('Database', 'SQLite'); - } - if ($databaseType === 'postgresql') { - $generator->databaseType = WorkflowGenerator::DB_TYPE_POSTGRESQL; - $reportExecution->addValueInfo('Database', 'PostgreSQL service'); - } - if ($generator->databaseType !== WorkflowGenerator::DB_TYPE_NONE) { - $migrationFiles = scandir($guesserFiles->getMigrationsPath()); - if (count($migrationFiles) > 4) { - $generator->stepRunMigrations = true; - $reportExecution->addValueInfo('Migrations', 'Detected'); - } else { - $reportExecution->addValueComment('Migrations', 'Not detected'); - } - } else { - $reportExecution->addValueComment('Database', 'No database'); - } - } - if ($guesserFiles->packageExists()) { - $generator->stepNodejs = true; - $generator->stepNodejsVersion = '18.x'; - $versionFromNvmrc = $generator->readNvmrc($guesserFiles - ->getNvmrcPath()); - if ($versionFromNvmrc !== '') { - $generator->stepNodejsVersion = $versionFromNvmrc; - } - $reportExecution->addValueInfo('NodeJS/Npm', 'Detected, version '.$generator->stepNodejsVersion); - } else { - $reportExecution->addValueComment('NodeJS/Npm', 'Not Detected'); - } - $appKey = ''; - $generator->stepGenerateKey = false; - - if ($guesserFiles->envDefaultTemplateExists()) { - $generator->stepCopyEnvTemplateFile = true; - $reportExecution->addValueInfo('.env file', 'Detected'); - $generator->stepEnvTemplateFile = $optionEnvWorkflowFile; - // Generate Key - $envArray = $generator->readDotEnv($guesserFiles->getEnvDefaultTemplatePath()); - $appKey = Arr::get($envArray, 'APP_KEY', ''); - - $generator->stepGenerateKey = $appKey === ''; - if ($generator->stepGenerateKey) { - $reportExecution->addValueInfo('Laravel App Key', 'Will be generated'); - } - } else { - $reportExecution->addValueComment('.env file', 'Not detected'); - $generator->stepCopyEnvTemplateFile = false; - } - $generator->stepFixStoragePermissions = false; - if ($guesserFiles->artisanExists()) { - //artisan file so:ENV_TEMPLATE_FILE_DEFAULT. - // fix storage permissions - $generator->stepFixStoragePermissions = true; - } - if ($generator->stepFixStoragePermissions) { - $reportExecution->addValueInfo('Laravel Fix storage permissions', 'Chmod will be executed'); - } - - $data = $generator->setData(); - - $result = $generator->generate($data); - if ($dryRun) { - $this->title('Ghygen'); - $this->table(['Report', 'Status'], $reportExecution->toArrayLabelValue()); - } else { - if ($this->saveFile) { - try { - $size = file_put_contents($yamlFile, $result); - $this->title('Ghygen'); - $this->table(['Report', 'status'], $reportExecution->toArrayLabelValue()); - $this->info('File '.$yamlFile); - $this->info('File created ('.$size.' bytes)'); - } catch (\Exception $e) { - if (! GuesserFiles::existsGithubWorkflowDirectory($projectdir)) { - $this->error( - "Workflow directory doesn't exist : ". - GuesserFiles::getGithubWorkflowDirectory($projectdir) - ); - $this->info( - 'Hint: create Workflow directory: '. - GuesserFiles::getGithubWorkflowDirectory($projectdir) - ); - } else { - $this->error($e->getMessage()); - } - } - } else { - $this->line($result); - } - } - - return 0; - } -} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php deleted file mode 100644 index fdbd5a9..0000000 --- a/app/Console/Kernel.php +++ /dev/null @@ -1,40 +0,0 @@ - - */ - protected $commands = [ - // - ]; - - /** - * Define the application's command schedule. - * - * @return void - */ - protected function schedule(Schedule $schedule) - { - // $schedule->command('inspire')->hourly(); - } - - /** - * Register the commands for the application. - * - * @return void - */ - protected function commands() - { - $this->load(__DIR__.'/Commands'); - - include base_path('routes/console.php'); - } -} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php deleted file mode 100644 index 50a0a9e..0000000 --- a/app/Exceptions/Handler.php +++ /dev/null @@ -1,42 +0,0 @@ -> - */ - protected $dontReport = [ - // - ]; - - /** - * A list of the inputs that are never flashed for validation exceptions. - * - * @var array - */ - protected $dontFlash = [ - 'password', - 'password_confirmation', - ]; - - /** - * Register the exception handling callbacks for the application. - * - * @return void - */ - public function register() - { - $this->reportable( - function (Throwable $e) { - // - } - ); - } -} diff --git a/app/Http/Controllers/ConfiguratorController.php b/app/Http/Controllers/ConfiguratorController.php deleted file mode 100644 index 9f7705c..0000000 --- a/app/Http/Controllers/ConfiguratorController.php +++ /dev/null @@ -1,19 +0,0 @@ - config('gh-action-yaml-generator.data.title_about'), - 'description' => config('gh-action-yaml-generator.data.description'), - ]); - } -} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index ce1176d..8677cd5 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,14 +2,7 @@ namespace App\Http\Controllers; -use Illuminate\Foundation\Auth\Access\AuthorizesRequests; -use Illuminate\Foundation\Bus\DispatchesJobs; -use Illuminate\Foundation\Validation\ValidatesRequests; -use Illuminate\Routing\Controller as BaseController; - -class Controller extends BaseController +abstract class Controller { - use AuthorizesRequests; - use DispatchesJobs; - use ValidatesRequests; + // } diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php deleted file mode 100644 index 113690e..0000000 --- a/app/Http/Controllers/DashboardController.php +++ /dev/null @@ -1,11 +0,0 @@ - - */ - protected $middleware = [ - // \App\Http\Middleware\TrustHosts::class, - \App\Http\Middleware\TrustProxies::class, - \Fruitcake\Cors\HandleCors::class, - \App\Http\Middleware\PreventRequestsDuringMaintenance::class, - \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, - \App\Http\Middleware\TrimStrings::class, - \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - ]; - - /** - * The application's route middleware groups. - * - * @var array> - */ - protected $middlewareGroups = [ - 'web' => [ - \App\Http\Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, - \Illuminate\Session\Middleware\StartSession::class, - // \Illuminate\Session\Middleware\AuthenticateSession::class, - \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \App\Http\Middleware\VerifyCsrfToken::class, - \Illuminate\Routing\Middleware\SubstituteBindings::class, - ], - - 'api' => [ - 'throttle:api', - \Illuminate\Routing\Middleware\SubstituteBindings::class, - ], - ]; - - /** - * The application's route middleware. - * - * These middleware may be assigned to groups or used individually. - * - * @var array - */ - protected $routeMiddleware = [ - 'auth' => \App\Http\Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, - 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, - 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - ]; -} diff --git a/app/Http/Livewire/ConfiguratorForm.php b/app/Http/Livewire/ConfiguratorForm.php deleted file mode 100644 index f2dd2ac..0000000 --- a/app/Http/Livewire/ConfiguratorForm.php +++ /dev/null @@ -1,226 +0,0 @@ - - */ - protected $queryString = [ - 'code' => ['except' => ''], - 'template' => ['except' => ''], - ]; - - public string $result; - - public string $errorGeneration; - - /** - * @var array - */ - public $hints; - - /** - * @var array - */ - protected $rules = [ - 'name' => 'required|string', - 'onPushBranches' => 'exclude_unless:onPush,1|required', - 'onPullrequestBranches' => 'exclude_unless:onPullrequest,1|required', - 'mysqlVersion' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_MYSQL.'|required', - 'mysqlDatabaseName' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_MYSQL.'|required', - 'mysqlDatabasePort' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_MYSQL.'|required|integer', - 'postgresqlVersion' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_POSTGRESQL.'|required', - 'postgresqlDatabaseName' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_POSTGRESQL.'|required', - 'postgresqlDatabasePort' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_POSTGRESQL.'|required|integer', - - 'matrixLaravelVersions' => 'exclude_unless:matrixLaravel,1|required', - ]; - - private function loadDefaults(): void - { - $this->loadDefaultsBaseWorkflow(); - $this->loadDefaultsCodeQuality(); - $this->loadDefaultsLaravelStuff(); - $this->loadDefaultsDeploy(); - } - - private function loadFromJson(object $j): void - { - $this->loadBaseWorkflowFromJson($j); - $this->loadCodeQualityFromJson($j); - $this->loadLaravelStuffFromJson($j); - $this->loadDeployFromJson($j); - } - - public function mount(): void - { - $this->fill(request()->only('code')); - Log::debug(__METHOD__.' Code : '.$this->code); - $codeNotFound = false; - $this->loadDefaults(); - if ($this->template != '') { - $this->template($this->template); - } - if ($this->code != '') { - $confModel = Configuration::getByCode($this->code); - if ($confModel) { - $j = $confModel->configuration; - $this->loadFromJson($j); - } else { - $codeNotFound = true; - } - } - $this->result = ' '; - $this->errorGeneration = ''; - - $this->hints = []; - if ($codeNotFound) { - $this->hints[] = 'The Code : '.$this->code.' was not found. So the default configuration was loaded.'; - } - } - - public function updated(string $propertyName): void - { - $this->result = ' '; - } - - public function template(string $x): void - { - if (in_array($x, ['laravelapp', 'laravelpostgresql', 'laravelpackage', 'phppackage'])) { - $this->template = $x; - $this->code = ''; - $j = json_decode(file_get_contents(resource_path('templates/json/'.$x.'.json'))); - $this->loadFromJson($j); - } else { - $this->template = ''; - } - } - - /** - * @return void - */ - public function submitForm() - { - try { - $this->rateLimit(60); - } catch (TooManyRequestsException $exception) { - $this->addError( - 'yaml', - 'Slow down! Please wait another '. - $exception->secondsUntilAvailable. - ' seconds to generate a new yaml workflow.' - ); - - return; - } - Log::debug('Code:'.$this->code); - $values = $this->getDataForValidation($this->rules); - $this->validate(); - if ( - ! $values['onPush'] && ! $values['onPullrequest'] - && ! $values['manualTrigger'] && ! $values['onSchedule'] - ) { - $this->addError('onEvents', 'You need to select at least one of GitHub event that triggers the workflow'); - - return; - } - - // Provide some suggestions - $this->hints = []; - if ($values['databaseType'] !== WorkflowGenerator::DB_TYPE_NONE and ! $values['stepRunMigrations']) { - $this->hints[] = 'I suggest you to select run migration if you have a Database'; - } - if ($values['databaseType'] === WorkflowGenerator::DB_TYPE_NONE and $values['stepRunMigrations']) { - $this->hints[] = 'I suggest you to select a Database if you want to run migrations'; - } - if ($values['stepDusk'] and ! $values['stepNodejs']) { - $this->hints[] = "I suggest you to select 'Install node for NPM Build' if you have 'Execute Browser tests'"; - } - if ($values['onPush'] and $values['onPullrequest'] and $values['manualTrigger']) { - $hint = "You selected all 3 options: 'on Push', 'on Pull Request', and 'Manual Trigger'."; - $hint = $hint." I suggest you to select 'Manual Trigger' OR 'on push / on pull request'."; - $this->hints[] = $hint; - $this->hints[] = "I selected automatically a 'Manual Trigger' for you."; - } - - $data = $this->setDataBaseWorkflow([]); - $data = $this->setDataCodeQuality($data); - $data = $this->setDataLaravelStuff($data); - $data = $this->setDeployData($data); - - $stringResult = view('action_yaml', $data)->render(); - $this->errorGeneration = ''; - try { - $array = Yaml::parse($stringResult); - } catch (ParseException $e) { - $this->errorGeneration = $e->getMessage(); - $this->result = $stringResult; - $this->addError('yaml', $e->getMessage()); - - return; - } - try { - $json = json_encode($array); - //$compressed = gzdeflate($json, 9); - $hashCode = md5($json); - Configuration::saveConfiguration($hashCode, $data); - $this->code = $hashCode; - $seconds = 60 * 60 * 3; // 3 hours - $schema = Cache::remember('cache-schema-yaml', $seconds, function () { - //return Schema::import('https://json.schemastore.org/github-workflow'); - return Schema::import(json_decode(file_get_contents(base_path('github-workflow.json')))); - }); - $schema->in(json_decode($json)); - - // Add Header to the View - $dataHeader = []; - $dataHeader['code'] = $this->code; - $dataHeader['configurationUrl'] = url('/').'?code='.$this->code; - $stringHeaderResult = view('yaml.header', $dataHeader)->render(); - // - - $this->result = $stringHeaderResult.$stringResult; - } catch (\Exception $e) { - $this->errorGeneration = $e->getMessage(); - $this->result = $stringResult; - $this->addError('yaml', $e->getMessage()); - - return; - } - } - - public function render(): \Illuminate\View\View - { - return view('livewire.configurator-form'); - } -} diff --git a/app/Http/Livewire/Dashboard/Daily.php b/app/Http/Livewire/Dashboard/Daily.php deleted file mode 100644 index 65cd49c..0000000 --- a/app/Http/Livewire/Dashboard/Daily.php +++ /dev/null @@ -1,35 +0,0 @@ - - */ - public $daily; - - public function mount(): void - { - $date = DB::raw('DATE(`created_at`) as `date`'); - if (config('database.default') === 'pgsql') { - $date = DB::raw("date_trunc('day', created_at) as date"); - } - $this->daily = LogConfiguration::select([ - $date, - DB::raw('count(*) as count'), - ]) - ->groupBy('date') - ->orderBy('date', 'DESC') // or ASC - ->pluck('count', 'date'); - } - - public function render(): \Illuminate\View\View - { - return view('livewire.dashboard.daily'); - } -} diff --git a/app/Http/Livewire/Dashboard/Latest.php b/app/Http/Livewire/Dashboard/Latest.php deleted file mode 100644 index fbe116e..0000000 --- a/app/Http/Livewire/Dashboard/Latest.php +++ /dev/null @@ -1,24 +0,0 @@ -latest = Configuration::latest('updated_at')->take(5)->get(); - } - - public function render(): \Illuminate\View\View - { - return view('livewire.dashboard.latest'); - } -} diff --git a/app/Http/Livewire/Dashboard/Metrics.php b/app/Http/Livewire/Dashboard/Metrics.php deleted file mode 100644 index a9a915e..0000000 --- a/app/Http/Livewire/Dashboard/Metrics.php +++ /dev/null @@ -1,46 +0,0 @@ -count = Configuration::count(); - $this->total = Configuration::sum('counts'); - $this->last4hours = Configuration::where( - 'updated_at', - '>', - Carbon::now()->subHours(3)->toDateTimeString() - )->count(); - $this->last24hours = Configuration::where( - 'updated_at', - '>', - Carbon::now()->subHours(24)->toDateTimeString() - )->count(); - $this->last3days = Configuration::where( - 'updated_at', - '>', - Carbon::now()->subHours(24 * 3)->toDateTimeString() - )->count(); - } - - public function render(): \Illuminate\View\View - { - return view('livewire.dashboard.metrics'); - } -} diff --git a/app/Http/Livewire/Dashboard/Top.php b/app/Http/Livewire/Dashboard/Top.php deleted file mode 100644 index 7c39813..0000000 --- a/app/Http/Livewire/Dashboard/Top.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public $top; - - public function mount(): void - { - $this->top = Configuration::orderBy('counts', 'DESC')->take(5)->get(); - } - - public function render(): \Illuminate\View\View - { - return view('livewire.dashboard.top'); - } -} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php deleted file mode 100644 index 06229e1..0000000 --- a/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,23 +0,0 @@ -expectsJson()) { - return route('login'); - } - - return null; - } -} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index 867695b..0000000 --- a/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ - protected $except = [ - // - ]; -} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php deleted file mode 100644 index 74cbd9a..0000000 --- a/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ - protected $except = [ - // - ]; -} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php deleted file mode 100644 index fe886b0..0000000 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ /dev/null @@ -1,30 +0,0 @@ -check()) { - return redirect(RouteServiceProvider::HOME); - } - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 88cadca..0000000 --- a/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - protected $except = [ - 'current_password', - 'password', - 'password_confirmation', - ]; -} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php deleted file mode 100644 index 7186414..0000000 --- a/app/Http/Middleware/TrustHosts.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public function hosts() - { - return [ - $this->allSubdomainsOfApplicationUrl(), - ]; - } -} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php deleted file mode 100644 index 3391630..0000000 --- a/app/Http/Middleware/TrustProxies.php +++ /dev/null @@ -1,28 +0,0 @@ -|string|null - */ - protected $proxies; - - /** - * The headers that should be used to detect proxies. - * - * @var int - */ - protected $headers = - Request::HEADER_X_FORWARDED_FOR | - Request::HEADER_X_FORWARDED_HOST | - Request::HEADER_X_FORWARDED_PORT | - Request::HEADER_X_FORWARDED_PROTO | - Request::HEADER_X_FORWARDED_AWS_ELB; -} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php deleted file mode 100644 index 9e86521..0000000 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ - protected $except = [ - // - ]; -} diff --git a/app/Http/Resources/ConfigurationCollection.php b/app/Http/Resources/ConfigurationCollection.php deleted file mode 100644 index a3f5589..0000000 --- a/app/Http/Resources/ConfigurationCollection.php +++ /dev/null @@ -1,19 +0,0 @@ -|\JsonSerializable|array - */ - public function toArray($request) - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ConfigurationResource.php b/app/Http/Resources/ConfigurationResource.php deleted file mode 100644 index b75af25..0000000 --- a/app/Http/Resources/ConfigurationResource.php +++ /dev/null @@ -1,32 +0,0 @@ - - */ - public function toArray($request) - { - return [ - 'code' => $this->code, - 'counts' => $this->counts, - 'created_at' => $this->created_at, - 'updated_at' => $this->updated_at, - ]; - } -} diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php deleted file mode 100644 index c8dd6f7..0000000 --- a/app/Models/Configuration.php +++ /dev/null @@ -1,92 +0,0 @@ - - */ - protected $casts = [ - 'configuration' => 'object', - ]; - - /** - * @return Configuration|null|static - */ - public static function getByCode(string $code) - { - return self::firstWhere('code', $code); - } - - public function isMysqlService(): bool - { - if (isset($this->configuration->mysqlService)) { - return $this->configuration->mysqlService; - } - - return $this->configuration->databaseType === 'mysql'; - } - - public function isSqlite(): bool - { - if (isset($this->configuration->databaseType)) { - return $this->configuration->databaseType === 'sqlite'; - } - - return false; - } - - public function isPostgresqlService(): bool - { - if (isset($this->configuration->databaseType)) { - return $this->configuration->databaseType === 'postgresql'; - } - - return false; - } - - public function getDatabaseType(): string - { - if ($this->isMysqlService()) { - return 'Mysql'; - } - if ($this->isPostgresqlService()) { - return 'Postgresql'; - } - if ($this->isSqlite()) { - return 'Sqlite'; - } - - return ''; - } - - /** - * @param array|object|mixed $json - */ - public static function saveConfiguration(string $code, $json, string $metadata = '{}'): void - { - $confModel = self::getByCode($code); - - if (! $confModel) { - $confModel = new self(); - $confModel->code = $code; - $confModel->configuration = $json; - $confModel->metadata = $metadata; - $confModel->counts = 0; - } - - $confModel->counts = $confModel->counts + 1; - - $confModel->save(); - - LogConfiguration::create([ - 'code' => $code, - ]); - } -} diff --git a/app/Models/LogConfiguration.php b/app/Models/LogConfiguration.php deleted file mode 100644 index 6ba847e..0000000 --- a/app/Models/LogConfiguration.php +++ /dev/null @@ -1,13 +0,0 @@ - + * @var array */ protected $fillable = [ 'name', @@ -23,7 +23,7 @@ class User extends Authenticatable ]; /** - * The attributes that should be hidden for arrays. + * The attributes that should be hidden for serialization. * * @var array */ @@ -33,11 +33,15 @@ class User extends Authenticatable ]; /** - * The attributes that should be cast to native types. + * Get the attributes that should be cast. * - * @var array + * @return array */ - protected $casts = [ - 'email_verified_at' => 'datetime', - ]; + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } } diff --git a/app/Objects/GuesserFiles.php b/app/Objects/GuesserFiles.php deleted file mode 100644 index 1f43ee6..0000000 --- a/app/Objects/GuesserFiles.php +++ /dev/null @@ -1,236 +0,0 @@ - - */ - public array $filePaths = []; - - public function pathFiles(string $projectDir, string $optionEnvWorkflowFile = self::ENV_DEFAULT_TEMPLATE_FILE): void - { - $arrayFiles = [ - self::COMPOSER_VAR => self::COMPOSER_FILE, - self::ENV_VAR => self::ENV_FILE, - self::ENV_DEFAULT_TEMPLATE_VAR => self::ENV_DEFAULT_TEMPLATE_FILE, - self::NVMRC_VAR => self::NVMRC_FILE, - self::PACKAGE_VAR => self::PACKAGE_FILE, - self::ARTISAN_VAR => self::ARTISAN_FILE, - self::MIGRATIONS_VAR => self::MIGRATIONS_DIR, - self::PHPSTANNEON_VAR => self::PHPSTANNEON_FILE, - ]; - foreach ($arrayFiles as $variable => $file) { - $this->filePaths[$variable] = base_path($file); - } - - if ($projectDir === '') { - return; - } - - foreach ($arrayFiles as $variable => $file) { - $this->filePaths[$variable] = $projectDir.DIRECTORY_SEPARATOR.$file; - } - } - - public function getComposerPath(): string - { - return Arr::get($this->filePaths, self::COMPOSER_VAR, ''); - } - - public function composerExists(): bool - { - $exists = $this->getComposerPath(); - if ($exists === '') { - return false; - } - - return is_file($this->getComposerPath()); - } - - public function getEnvPath(): string - { - return Arr::get($this->filePaths, self::ENV_VAR, ''); - } - - public function envExists(): bool - { - $exists = $this->getEnvPath(); - if ($exists === '') { - return false; - } - - return is_file($this->getEnvPath()); - } - - public function getEnvDefaultTemplatePath(): string - { - return Arr::get($this->filePaths, self::ENV_DEFAULT_TEMPLATE_VAR, ''); - } - - public function envDefaultTemplateExists(): bool - { - return $this->somethingExists('getEnvDefaultTemplatePath'); - } - - public function getPackagePath(): string - { - return Arr::get($this->filePaths, self::PACKAGE_VAR, ''); - } - - public function packageExists(): bool - { - return $this->somethingExists('getPackagePath'); - } - - public function getNvmrcPath(): string - { - return Arr::get($this->filePaths, self::NVMRC_VAR, ''); - } - - public function nvmrcExists(): bool - { - return $this->somethingExists('getNvmrcPath'); - } - - public function getArtisanPath(): string - { - return Arr::get($this->filePaths, self::ARTISAN_VAR, ''); - } - - public function artisanExists(): bool - { - return $this->somethingExists('getArtisanPath'); - } - - public function getPhpstanNeonPath(): string - { - return Arr::get($this->filePaths, self::PHPSTANNEON_VAR, ''); - } - - public function phpstanNeonExists(): bool - { - return $this->somethingExists('getPhpstanNeonPath'); - } - - public function getMigrationsPath(): string - { - return Arr::get($this->filePaths, self::MIGRATIONS_VAR, ''); - } - - public function migrationsExists(): bool - { - return $this->somethingExists('getMigrationsPath', true); - } - - public function dispatch(string $method): string - { - $callback = [$this, $method]; - if (is_callable($callback)) { - return strval(call_user_func($callback)); - } - - throw new \Exception('Method not found'); - } - - private function somethingExists(string $methodPath, bool $isDirCheck = false): bool - { - //$path = call_user_func(array($this, $methodPath)); - $path = $this->dispatch($methodPath); - $exists = $path; - if ($exists == '') { - return false; - } - if ($isDirCheck) { - return is_dir($path); - } - - return is_file($path); - } - - /** - * @return array - */ - public static function detectLaravelVersionFromTestbench(string $testbenchVersion): array - { - $listLaravelVersions = ['6.*', '7.*', '8.*', '9.*', '10.*']; - $listTestBenchVersions = ['4.0', '5.0', '6.0', '7.0', '8.0']; - $stepLaravelVersions = []; - $i = 0; - - try { - foreach ($listTestBenchVersions as $testbench) { - if (Semver::satisfies($testbench, $testbenchVersion)) { - $stepLaravelVersions[] = $listLaravelVersions[$i]; - } - $i++; - } - } catch (\Exception $e) { - $stepLaravelVersions = []; - } - //$this->ste = $stepPhp; - return $stepLaravelVersions; - } - - public static function generateYamlFilename( - string $path = '', - string $title = '' - ): string { - if ($title === '') { - $title = 'Ghygen Auto Workflow'; - } - $timeStamp = date('Ymd-His'); - $fileName = Str::slug($title, '_').'-'.$timeStamp.'.yml'; - - return $path.$fileName; - } - - public static function getGithubWorkflowDirectory( - string $projectdir = '' - ): string { - return $projectdir.'.github/workflows/'; - } - - public static function existsGithubWorkflowDirectory( - string $projectdir = '' - ): bool { - return is_dir(self::getGithubWorkflowDirectory($projectdir)); - } -} diff --git a/app/Objects/ReportExecution.php b/app/Objects/ReportExecution.php deleted file mode 100644 index 26fa215..0000000 --- a/app/Objects/ReportExecution.php +++ /dev/null @@ -1,167 +0,0 @@ - - */ - private Collection $result; - - private int $idx = -1; - - public const LINE_TYPE_ERROR = 'error'; - - public const LINE_TYPE_WARNING = 'warning'; - - public const LINE_TYPE_INFO = 'info'; - - public const LINE_TYPE_HINT = 'hint'; - - public const LINE_TYPE_DEFAULT = 'default'; - - public function __construct() - { - $this->reset(); - } - - public function reset(): void - { - $this->result = new Collection(); - $this->idx = -1; - } - - public function addError(string $label, string $value): void - { - $this->add($label, $value, true, self::LINE_TYPE_ERROR); - } - - public function addWarning(string $label, string $value): void - { - $this->add($label, $value, true, self::LINE_TYPE_WARNING); - } - - /** - * @param string|string[] $value - * - * @psalm-param array|string $value - */ - public function addValue(string $label, $value, string $style = ''): void - { - if (is_array($value)) { - $value = implode(',', $value); - } - if ($style !== '') { - $value = sprintf('<%s>%s', $style, $value, $style); - } - $this->add($label, $value, true, self::LINE_TYPE_INFO); - } - - /** - * @param string|string[] $value - * - * @psalm-param array|string $value - */ - public function addValueInfo(string $label, $value): void - { - $this->addValue($label, $value, 'info'); - } - - /** - * @param string|string[] $value - * - * @psalm-param array|string $value - */ - public function addValueComment(string $label, $value): void - { - $this->addValue($label, $value, 'comment'); - } - - public function addHint(string $value): void - { - $this->add('*** HINT', $value, true, self::LINE_TYPE_HINT); - } - - public function addErrorAndHint( - string $label, - string $errorMessage, - string $hintMessage - ): void { - $this->addError($label, $errorMessage); - $this->addHint($hintMessage); - } - - public function addWarningAndHint( - string $label, - string $warningMessage, - string $hintMessage - ): void { - $this->addWarning($label, $warningMessage); - $this->addHint($hintMessage); - } - - public function addInfoAndHint( - string $label, - string $infoMessage, - string $hintMessage - ): void { - $this->addValue($label, $infoMessage); - $this->addHint($hintMessage); - } - - public function add( - string $label, - string $value, - bool $forceLine = false, - string $lineType = self::LINE_TYPE_DEFAULT - ): void { - $this->result->push( - [ - 'label' => $label, - 'value' => $value, - 'isLine' => $forceLine, - 'lineType' => $lineType, - ] - ); - $this->idx++; - } - - public static function isMessageLine(string $lineType): bool - { - return ($lineType === self::LINE_TYPE_ERROR) || - ($lineType === self::LINE_TYPE_WARNING) || - ($lineType === self::LINE_TYPE_INFO); - } - - public static function isHintLine(string $lineType): bool - { - return $lineType === self::LINE_TYPE_HINT; - } - - /** - * @return array - */ - public function toArrayLabelValue(): array - { - $retArray = []; - foreach ($this->result as $r) { - $label = Arr::get($r, 'label', ''); - $value = Arr::get($r, 'value', ''); - $retArray[] = ['label' => $label, 'value' => $value]; - } - - return $retArray; - } - - /** - * @return array - */ - public function toArray(): array - { - return $this->result->toArray(); - } -} diff --git a/app/Objects/WorkflowGenerator.php b/app/Objects/WorkflowGenerator.php deleted file mode 100644 index 9c8a398..0000000 --- a/app/Objects/WorkflowGenerator.php +++ /dev/null @@ -1,180 +0,0 @@ -loadDefaultsBaseWorkflow(); - $this->loadDefaultsCodeQuality(); - $this->loadDefaultsLaravelStuff(); - $this->loadDefaultsDeploy(); - } - - /** - * @return array - */ - public static function compactObject(object $object, string ...$args): array - { - $vars = get_object_vars($object); - $retVal = []; - foreach ($args as $arg) { - if (array_key_exists($arg, $vars)) { - $retVal[$arg] = $vars[$arg]; - } elseif (array_key_exists(Str::camel($arg), $vars)) { - $retVal[$arg] = $vars[Str::camel($arg)]; - } - } - - return $retVal; - } - - /** - * @param array $array - */ - public static function arrayToString(array $array): string - { - return '[ '.implode( - ',', - array_map( - function ($str) { - return "'$str'"; - }, - $array - ) - ).' ]'; - } - - /** - * @param array|string $somethingToSplit - * @return array|mixed - */ - public static function split($somethingToSplit, string $splitChars = ',') - { - if (\is_string($somethingToSplit)) { - return array_map('trim', explode($splitChars, $somethingToSplit)); - } - - return $somethingToSplit; - } - - /** - * @return array - */ - public function setData(): array - { - $data = []; - $data = $this->setDataBaseWorkflow($data); - $data = $this->setDataCodeQuality($data); - $data = $this->setDataLaravelStuff($data); - $data = $this->setDeployData($data); - - return $data; - } - - /** - * @param array $data - * @return array|string - */ - public function generate(array $data) - { - $stringResult = view('action_yaml', $data)->render(); - - return $stringResult; - } - - /** - * @return string[] - * - * @psalm-return list<'7.3'|'7.4'|'8.0'|'8.1|'8.2'> - */ - public function detectPhpVersion(string $phpversion): array - { - $listPhpVersions = ['7.3', '7.4', '8.0', '8.1', '8.2']; - $stepPhp = []; - foreach ($listPhpVersions as $php) { - if (Semver::satisfies($php, $phpversion)) { - $stepPhp[] = $php; - } - } - $this->stepPhpVersions = $stepPhp; - - return $stepPhp; - } - - /** - * Detect cache, for now the behavior is to disable cache - */ - public function detectCache(bool $cache): void - { - $this->stepCacheNpmModules = $cache; - $this->stepCachePackages = $cache; - $this->stepCacheVendors = $cache; - } - - /** - * @return string[] - * - * @psalm-return array - */ - public function readDotEnv(string $fileEnv): array - { - $envConfiguration = []; - if (! is_readable($fileEnv)) { - throw new \RuntimeException(sprintf('%s file is not readable', $fileEnv)); - } - - $lines = file($fileEnv, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - foreach ($lines as $line) { - if (strpos(trim($line), '#') === 0) { - continue; - } - - [$name, $value] = explode('=', $line, 2); - $name = trim($name); - $value = trim($value); - $envConfiguration[$name] = $value; - } - - return $envConfiguration; - } - - public function readNvmrc(string $fileNvmrc): string - { - if (! is_readable($fileNvmrc)) { - return ''; - } - - $lines = file($fileNvmrc, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - foreach ($lines as $line) { - if (strpos(trim($line), '#') === 0) { - continue; - } - - return $line; - } - - return ''; - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 55cbb4f..452e6b6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,30 +2,23 @@ namespace App\Providers; -use Illuminate\Support\Facades\URL; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Register any application services. - * - * @return void */ - public function register() + public function register(): void { // } /** * Bootstrap any application services. - * - * @return void */ - public function boot() + public function boot(): void { - if (config('app.force_https')) { - URL::forceScheme('https'); - } + // } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php deleted file mode 100644 index 59e239f..0000000 --- a/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ - protected $policies = [ - // 'App\Models\Model' => 'App\Policies\ModelPolicy', - ]; - - /** - * Register any authentication / authorization services. - * - * @return void - */ - public function boot() - { - $this->registerPolicies(); - - // - } -} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 9529056..0000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,21 +0,0 @@ -> - */ - protected $listen = [ - Registered::class => [ - SendEmailVerificationNotification::class, - ], - ]; - - /** - * Register any events for your application. - * - * @return void - */ - public function boot() - { - // - } -} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php deleted file mode 100644 index c277371..0000000 --- a/app/Providers/RouteServiceProvider.php +++ /dev/null @@ -1,66 +0,0 @@ -configureRateLimiting(); - - $this->routes( - function () { - Route::prefix('api') - ->middleware('api') - ->namespace($this->namespace) - ->group(base_path('routes/api.php')); - - Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web.php')); - } - ); - } - - /** - * Configure the rate limiters for the application. - * - * @return void - */ - protected function configureRateLimiting() - { - RateLimiter::for( - 'api', - function (Request $request) { - return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); - } - ); - } -} diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php deleted file mode 100644 index d1865c5..0000000 --- a/app/Providers/ViewServiceProvider.php +++ /dev/null @@ -1,23 +0,0 @@ -|string - */ - public $onPushBranches; - - public bool $onPullrequest; - - /** - * @var array - */ - public array $onPullrequestBranches; - - public bool $manualTrigger; - - public bool $onSchedule; // false - - public string $onScheduleCron; // "0 0 * * *" - - public string $databaseType; // 'none', 'mysql', 'postgresql', 'sqlite' - - public string $mysqlDatabase; - - public string $mysqlPasswordType; // 'skip - - public string $mysqlPassword; // password - - public string $mysqlVersion; - - public string $mysqlDatabaseName; - - public int $mysqlDatabasePort; - - public string $postgresqlDatabase; - - public string $postgresqlPasswordType; // 'skip - - public string $postgresqlPassword; // password - - public string $postgresqlVersion; - - public string $postgresqlDatabaseName; - - public int $postgresqlDatabasePort; - - /** - * @var array - */ - public array $stepPhpVersions; // 8.2 - - public bool $stepNodejs; // false - - public string $stepNodejsVersion; // 18.x - - public bool $stepCachePackages; //true - - public bool $stepCacheVendors; //true - - public bool $stepCacheNpmModules; // true - - /** - * @var array - */ - public array $dependencyStability; // [] - - public function loadDefaultsBaseWorkflow(): void - { - $this->name = 'Test Laravel Github action'; - $this->onPush = true; - $this->onPushBranches = ['main', 'develop', 'features/**']; - $this->onPullrequest = false; - $this->onPullrequestBranches = ['main', 'develop']; - $this->manualTrigger = false; - $this->onSchedule = false; - $this->onScheduleCron = '0 0 * * *'; - $this->databaseType = WorkflowGenerator::DB_TYPE_MYSQL; - $this->mysqlDatabase = 'mysql'; - $this->mysqlPasswordType = 'skip'; - $this->mysqlPassword = 'DB_PASSWORD'; - $this->mysqlVersion = 'latest'; - $this->mysqlDatabaseName = 'db_test_laravel'; - $this->mysqlDatabasePort = 33306; - $this->postgresqlDatabase = 'postgresql'; - $this->postgresqlPasswordType = 'hardcoded'; - $this->postgresqlPassword = 'postgres'; - $this->postgresqlVersion = 'latest'; - $this->postgresqlDatabaseName = 'db_test_laravel'; - $this->postgresqlDatabasePort = 55432; - $this->stepPhpVersions = ['8.2', '8.1', '8.0', '7.4']; - $this->stepNodejs = false; - $this->stepNodejsVersion = '18.x'; - $this->stepCachePackages = true; - $this->stepCacheVendors = true; - $this->stepCacheNpmModules = true; - $this->dependencyStability = ['prefer-none']; - } - - public function loadBaseWorkflowFromJson(object $j): void - { - data_fill($j, 'stepDirCodeSniffer', 'app'); - data_fill($j, 'dependencyStability', ['prefer-none']); - data_fill($j, 'on_schedule', false); - data_fill($j, 'on_schedule_cron', '0 0 * * *'); - $this->name = $j->name; - $this->onPush = $j->on_push; - $this->onPushBranches = $j->on_push_branches; - $this->onPullrequest = $j->on_pullrequest; - $this->onPullrequestBranches = $j->on_pullrequest_branches; - $this->manualTrigger = $j->manual_trigger; - $this->onSchedule = $j->on_schedule; - $this->onScheduleCron = $j->on_schedule_cron; - if (isset($j->mysqlService)) { - if ($j->mysqlService === true) { - $this->databaseType = WorkflowGenerator::DB_TYPE_MYSQL; - } elseif ($j->mysqlService === false) { - $this->databaseType = WorkflowGenerator::DB_TYPE_NONE; - } - } else { - $this->databaseType = $j->databaseType; - } - $this->mysqlDatabase = $j->mysqlDatabase; - $this->mysqlPasswordType = $j->mysqlPasswordType; - $this->mysqlPassword = $j->mysqlPassword; - $this->mysqlVersion = $j->mysqlVersion; - $this->mysqlDatabaseName = $j->mysqlDatabaseName; - $this->mysqlDatabasePort = $j->mysqlDatabasePort; - if (isset($j->postgresqlDatabase)) { - $this->postgresqlDatabase = $j->postgresqlDatabase; - $this->postgresqlPasswordType = - isset($j->postgresqlPasswordType) ? - $j->postgresqlPasswordType : - $this->postgresqlPasswordType; - $this->postgresqlPassword = - isset($j->postgresqlPassword) ? - $j->postgresqlPassword : - $this->postgresqlPassword; - $this->postgresqlVersion = - isset($j->postgresqlVersion) ? - $j->postgresqlVersion : - $this->postgresqlVersion; - $this->postgresqlDatabaseName = - isset($j->postgresqlDatabaseName) ? - $j->postgresqlDatabaseName : - $this->postgresqlDatabaseName; - $this->postgresqlDatabasePort = - isset($j->postgresqlDatabasePort) ? - $j->postgresqlDatabasePort : - $this->postgresqlDatabasePort; - } - $this->stepPhpVersions = $j->stepPhpVersions; - $this->stepNodejs = $j->stepNodejs; - $this->stepNodejsVersion = $j->stepNodejsVersion; - $this->stepCachePackages = $j->stepCachePackages; - $this->stepCacheVendors = $j->stepCacheVendors; - $this->stepCacheNpmModules = $j->stepCacheNpmModules; - $this->dependencyStability = (array) $j->dependencyStability; - } - - /** - * @param array $data - * @return array - */ - public function setDataBaseWorkflow(array $data): array - { - $data = WorkflowGenerator::compactObject( - $this, - 'databaseType', - 'mysqlDatabase', - 'mysqlVersion', - 'mysqlDatabaseName', - 'mysqlDatabasePort', - 'mysqlPassword', - 'mysqlPasswordType', - 'postgresqlDatabase', - 'postgresqlVersion', - 'postgresqlDatabaseName', - 'postgresqlDatabasePort', - 'postgresqlPassword', - 'postgresqlPasswordType', - 'name', - 'on_push', - 'on_push_branches', - 'on_pullrequest', - 'on_pullrequest_branches', - 'manual_trigger', - 'on_schedule', - 'on_schedule_cron', - 'stepPhpVersions', - 'stepNodejs', - 'stepNodejsVersion', - 'stepCachePackages', - 'stepCacheVendors', - 'stepCacheNpmModules' - ); - $data['stepPhpVersionsString'] = WorkflowGenerator::arrayToString($this->stepPhpVersions); - $data['on_pullrequest_branches'] = WorkflowGenerator::split($this->onPullrequestBranches); - $data['on_push_branches'] = WorkflowGenerator::split($this->onPushBranches); - $data['dependencyStabilityString'] = WorkflowGenerator::arrayToString($this->dependencyStability); - $data['dependencyStability'] = $this->dependencyStability; - - return $data; - } -} diff --git a/app/Traits/Form/CodeQuality.php b/app/Traits/Form/CodeQuality.php deleted file mode 100644 index 33d7932..0000000 --- a/app/Traits/Form/CodeQuality.php +++ /dev/null @@ -1,98 +0,0 @@ -stepExecutePhpunit = true; - $this->stepExecutePestphp = false; - $this->stepSecurityCheck = false; - $this->stepExecuteCodeSniffer = false; - $this->stepDirCodeSniffer = 'app'; - $this->stepInstallCodeSniffer = true; - $this->stepExecuteStaticAnalysis = false; - $this->stepDirStaticAnalysis = 'app'; - $this->stepToolStaticAnalysis = 'larastan'; - $this->stepInstallStaticAnalysis = true; - $this->stepDusk = false; - $this->stepPhpstanUseNeon = false; - $this->stepPsalmReport = false; - } - - public function loadCodeQualityFromJson(object $j): void - { - data_fill($j, 'stepDirCodeSniffer', 'app'); - data_fill($j, 'stepInstallCodeSniffer', true); - data_fill($j, 'stepDirStaticAnalysis', 'app'); - data_fill($j, 'stepInstallStaticAnalysis', true); - data_fill($j, 'stepToolStaticAnalysis', 'larastan'); - data_fill($j, 'stepExecutePestphp', false); - data_fill($j, 'stepPhpstanUseNeon', false); - data_fill($j, 'stepPsalmReport', false); - data_fill($j, 'stepSecurityCheck', false); - $this->stepExecutePhpunit = $j->stepExecutePhpunit; - $this->stepExecutePestphp = $j->stepExecutePestphp; - $this->stepExecuteCodeSniffer = $j->stepExecuteCodeSniffer; - $this->stepDirCodeSniffer = $j->stepDirCodeSniffer; - $this->stepInstallCodeSniffer = $j->stepInstallCodeSniffer; - $this->stepExecuteStaticAnalysis = $j->stepExecuteStaticAnalysis; - $this->stepDirStaticAnalysis = $j->stepDirStaticAnalysis; - $this->stepToolStaticAnalysis = $j->stepToolStaticAnalysis; - $this->stepInstallStaticAnalysis = $j->stepInstallStaticAnalysis; - $this->stepDusk = $j->stepDusk; - $this->stepPhpstanUseNeon = $j->stepPhpstanUseNeon; - $this->stepPsalmReport = $j->stepPsalmReport; - $this->stepSecurityCheck = $j->stepSecurityCheck; - } - - /** - * @param array $data - * @return array - */ - public function setDataCodeQuality(array $data): array - { - $data['stepExecutePhpunit'] = $this->stepExecutePhpunit; - $data['stepExecutePestphp'] = $this->stepExecutePestphp; - $data['stepExecuteCodeSniffer'] = $this->stepExecuteCodeSniffer; - $data['stepDirCodeSniffer'] = $this->stepDirCodeSniffer; - $data['stepInstallCodeSniffer'] = $this->stepInstallCodeSniffer; - $data['stepExecuteStaticAnalysis'] = $this->stepExecuteStaticAnalysis; - $data['stepDirStaticAnalysis'] = $this->stepDirStaticAnalysis; - $data['stepToolStaticAnalysis'] = $this->stepToolStaticAnalysis; - $data['stepInstallStaticAnalysis'] = $this->stepInstallStaticAnalysis; - $data['stepDusk'] = $this->stepDusk; - $data['stepPhpstanUseNeon'] = $this->stepPhpstanUseNeon; - $data['stepPsalmReport'] = $this->stepPsalmReport; - $data['stepSecurityCheck'] = $this->stepSecurityCheck; - - return $data; - } -} diff --git a/app/Traits/Form/Deploy.php b/app/Traits/Form/Deploy.php deleted file mode 100644 index 13d25ae..0000000 --- a/app/Traits/Form/Deploy.php +++ /dev/null @@ -1,60 +0,0 @@ -stepDeployType = 'none'; - $this->stepDeployWebhookType = 'secret'; - $this->stepDeployWebhookUrl = 'WEBHOOK_URL'; - $this->stepDeployForgeServerName = ''; - $this->stepDeployForgeSiteName = ''; - - //$this->stepDeployApiToken = "VAPOR_API_TOKEN"; - } - - public function loadDeployFromJson(object $j): void - { - data_fill($j, 'stepDeployType', 'none'); - data_fill($j, 'stepDeployWebhookType', 'secret'); - data_fill($j, 'stepDeployWebhookUrl', 'WEBHOOK_URL'); - data_fill($j, 'stepDeployForgeServerName', ''); - data_fill($j, 'stepDeployForgeSiteName', ''); - //data_fill($j, "stepDeployApiToken", 'VAPOR_API_TOKEN'); - - $this->stepDeployType = $j->stepDeployType; - $this->stepDeployWebhookType = $j->stepDeployWebhookType; - $this->stepDeployForgeServerName = $j->stepDeployForgeServerName; - $this->stepDeployForgeSiteName = $j->stepDeployForgeSiteName; - //$this->stepDeployApiToken = $j->stepDeployApiToken; - } - - /** - * @param array $data - * @return array - */ - public function setDeployData(array $data) - { - $data['stepDeployType'] = $this->stepDeployType; - $data['stepDeployWebhookType'] = $this->stepDeployWebhookType; - $data['stepDeployWebhookUrl'] = $this->stepDeployWebhookUrl; - $data['stepDeployForgeSiteName'] = $this->stepDeployForgeSiteName; - $data['stepDeployForgeServerName'] = $this->stepDeployForgeServerName; - //$data["stepDeployApiToken"] = $this->stepDeployApiToken; - - return $data; - } -} diff --git a/app/Traits/Form/LaravelStuff.php b/app/Traits/Form/LaravelStuff.php deleted file mode 100644 index ae8b701..0000000 --- a/app/Traits/Form/LaravelStuff.php +++ /dev/null @@ -1,82 +0,0 @@ - - */ - public $matrixLaravelVersions; // [] - - /** - * @var array - */ - public array $matrixTestbenchDependencies; - - public function loadDefaultsLaravelStuff(): void - { - $this->stepFixStoragePermissions = true; - $this->stepRunMigrations = true; - $this->stepGenerateKey = true; - $this->stepEnvTemplateFile = '.env.example'; - $this->stepCopyEnvTemplateFile = true; - $this->matrixLaravel = false; - $this->matrixLaravelVersions = []; - $this->matrixTestbenchDependencies = [ - '10.*' => '8.*', - '9.*' => '7.*', - '8.*' => '6.*', - '7.*' => '5.*', - '6.*' => '4.*', - ]; // mapping laravel versions with testbench version as dependency - // the key is the laravel ver, the value is the orchestratestbench version - } - - public function loadLaravelStuffFromJson(object $j): void - { - data_fill($j, 'stepGenerateKey', true); - data_fill($j, 'stepCopyEnvTemplateFile', true); - $this->stepFixStoragePermissions = $j->stepFixStoragePermissions; - $this->stepRunMigrations = $j->stepRunMigrations; - $this->stepGenerateKey = $j->stepGenerateKey; - $this->stepEnvTemplateFile = $j->stepEnvTemplateFile; - $this->stepCopyEnvTemplateFile = $j->stepCopyEnvTemplateFile; - $this->matrixLaravel = $j->matrixLaravel; - $this->matrixLaravelVersions = $j->matrixLaravelVersions; - //$this->matrixTestbenchDependencies = (array) $j->matrixTestbenchDependencies; - } - - /** - * @param array $data - * @return array - */ - public function setDataLaravelStuff(array $data): array - { - $data['stepFixStoragePermissions'] = $this->stepFixStoragePermissions; - $data['stepRunMigrations'] = $this->stepRunMigrations; - $data['stepGenerateKey'] = $this->stepGenerateKey; - $data['stepEnvTemplateFile'] = $this->stepEnvTemplateFile; - $data['stepCopyEnvTemplateFile'] = $this->stepCopyEnvTemplateFile; - $data['matrixLaravel'] = $this->matrixLaravel; - $data['matrixLaravelVersions'] = $this->matrixLaravelVersions; - $data['matrixTestbenchDependencies'] = $this->matrixTestbenchDependencies; - $data['matrixLaravelVersionsString'] = WorkflowGenerator::arrayToString($this->matrixLaravelVersions); - - return $data; - } -} diff --git a/app/View/Composers/AppDataComposer.php b/app/View/Composers/AppDataComposer.php deleted file mode 100644 index 5accfe1..0000000 --- a/app/View/Composers/AppDataComposer.php +++ /dev/null @@ -1,16 +0,0 @@ -with(compact('title', 'description')); - } -} diff --git a/artisan b/artisan index 5c23e2e..8e04b42 100755 --- a/artisan +++ b/artisan @@ -1,53 +1,15 @@ #!/usr/bin/env php make(Illuminate\Contracts\Console\Kernel::class); - -$status = $kernel->handle( - $input = new Symfony\Component\Console\Input\ArgvInput, - new Symfony\Component\Console\Output\ConsoleOutput -); - -/* -|-------------------------------------------------------------------------- -| Shutdown The Application -|-------------------------------------------------------------------------- -| -| Once Artisan has finished running, we will fire off the shutdown events -| so that any final work may be done by the application before we shut -| down the process. This is the last thing to happen to the request. -| -*/ - -$kernel->terminate($input, $status); +// Bootstrap Laravel and handle the command... +$status = (require_once __DIR__.'/bootstrap/app.php') + ->handleCommand(new ArgvInput); exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php index 037e17d..7b162da 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,55 +1,18 @@ singleton( - Illuminate\Contracts\Http\Kernel::class, - App\Http\Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Console\Kernel::class, - App\Console\Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Debug\ExceptionHandler::class, - App\Exceptions\Handler::class -); - -/* -|-------------------------------------------------------------------------- -| Return The Application -|-------------------------------------------------------------------------- -| -| This script returns the application instance. The instance is given to -| the calling script so we can separate the building of the instances -| from the actual running of the application and sending responses. -| -*/ - -return $app; +use Illuminate\Foundation\Application; +use Illuminate\Foundation\Configuration\Exceptions; +use Illuminate\Foundation\Configuration\Middleware; + +return Application::configure(basePath: dirname(__DIR__)) + ->withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware) { + // + }) + ->withExceptions(function (Exceptions $exceptions) { + // + })->create(); diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..38b258d --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,5 @@ +=7.1" + "php": "^8.0" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], "psr-4": { - "Amp\\": "lib" + "Brick\\Math\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", + "description": "Arbitrary-precision arithmetic library", "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" ], "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { - "url": "https://github.com/amphp", + "url": "https://github.com/BenMorel", "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { - "name": "amphp/byte-stream", - "version": "v1.8.1", + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", "shasum": "" }, "require": { - "amphp/amp": "^2", - "php": ">=7.1" + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "files": [ - "lib/functions.php" - ], "psr-4": { - "Amp\\ByteStream\\": "lib" + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" } }, "notification-url": "https://packagist.org/downloads/", @@ -141,69 +98,71 @@ ], "authors": [ { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" } ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "description": "Types to use Carbon in Doctrine", "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" + "carbon", + "date", + "datetime", + "doctrine", + "time" ], "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { - "url": "https://github.com/amphp", + "url": "https://github.com/kylekatarnls", "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { - "name": "asm89/stack-cors", - "version": "v2.1.1", + "name": "dflydev/dot-access-data", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/asm89/stack-cors.git", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "symfony/http-foundation": "^4|^5|^6", - "symfony/http-kernel": "^4|^5|^6" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7|^9", - "squizlabs/php_codesniffer": "^3.5" + "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-master": "2.1-dev" + "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { - "Asm89\\Stack\\": "src/" + "Dflydev\\DotAccessData\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -212,76 +171,69 @@ ], "authors": [ { - "name": "Alexander", - "email": "iam.asm89@gmail.com" + "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": "Cross-origin resource sharing library and stack middleware", - "homepage": "https://github.com/asm89/stack-cors", + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", "keywords": [ - "cors", - "stack" + "access", + "data", + "dot", + "notation" ], "support": { - "issues": "https://github.com/asm89/stack-cors/issues", - "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" + "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-01-18T09:12:03+00:00" + "time": "2022-10-27T11:44:00+00:00" }, { - "name": "barryvdh/laravel-ide-helper", - "version": "v2.13.0", + "name": "doctrine/inflector", + "version": "2.0.10", "source": { "type": "git", - "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a" + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/81d5b223ff067a1f38e14c100997e153b837fe4a", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { - "barryvdh/reflection-docblock": "^2.0.6", - "composer/class-map-generator": "^1.0", - "doctrine/dbal": "^2.6 || ^3", - "ext-json": "*", - "illuminate/console": "^8 || ^9 || ^10", - "illuminate/filesystem": "^8 || ^9 || ^10", - "illuminate/support": "^8 || ^9 || ^10", - "nikic/php-parser": "^4.7", - "php": "^7.3 || ^8.0", - "phpdocumentor/type-resolver": "^1.1.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "ext-pdo_sqlite": "*", - "friendsofphp/php-cs-fixer": "^2", - "illuminate/config": "^8 || ^9 || ^10", - "illuminate/view": "^8 || ^9 || ^10", - "mockery/mockery": "^1.4", - "orchestra/testbench": "^6 || ^7 || ^8", - "phpunit/phpunit": "^8.5 || ^9", - "spatie/phpunit-snapshot-assertions": "^3 || ^4", - "vimeo/psalm": "^3.12" - }, - "suggest": { - "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." + "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", - "extra": { - "branch-alias": { - "dev-master": "2.12-dev" - }, - "laravel": { - "providers": [ - "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "Barryvdh\\LaravelIdeHelper\\": "src" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -290,73 +242,88 @@ ], "authors": [ { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" + "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": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.", + "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": [ - "autocomplete", - "codeintel", - "helper", - "ide", - "laravel", - "netbeans", - "phpdoc", - "phpstorm", - "sublime" + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" ], "support": { - "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.13.0" + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { - "url": "https://fruitcake.nl", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/barryvdh", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" } ], - "time": "2023-02-04T13:56:40+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { - "name": "barryvdh/reflection-docblock", - "version": "v2.1.0", + "name": "doctrine/lexer", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "bf44b757feb8ba1734659029357646466ded673e" + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/bf44b757feb8ba1734659029357646466ded673e", - "reference": "bf44b757feb8ba1734659029357646466ded673e", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.14|^9" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { - "psr-0": { - "Barryvdh": [ - "src/" - ] + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -365,106 +332,143 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" + "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": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.0" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, - "time": "2022-10-31T15:35:43+00:00" + "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": "2024-02-05T11:56:58+00:00" }, { - "name": "brick/math", - "version": "0.11.0", + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", "source": { "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", "autoload": { "psr-4": { - "Brick\\Math\\": "src/" + "Cron\\": "src/Cron/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" ], "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" }, "funding": [ { - "url": "https://github.com/BenMorel", + "url": "https://github.com/dragonmantank", "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-08-10T19:36:49+00:00" }, { - "name": "composer/class-map-generator", - "version": "1.0.0", + "name": "egulias/email-validator", + "version": "4.0.2", "source": { "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { - "composer/pcre": "^2 || ^3", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { "psr-4": { - "Composer\\ClassMapGenerator\\": "src" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -473,66 +477,62 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Eduardo Gulias Davis" } ], - "description": "Utilities to scan PHP code and generate class maps.", + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", "keywords": [ - "classmap" + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" ], "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/egulias", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2022-06-19T11:31:27+00:00" + "time": "2023-10-06T06:47:41+00:00" }, { - "name": "composer/pcre", - "version": "3.1.0", + "name": "fruitcake/php-cors", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.x-dev" + "dev-master": "1.2-dev" } }, "autoload": { "psr-4": { - "Composer\\Pcre\\": "src" + "Fruitcake\\Cors\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -541,68 +541,62 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" } ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" + "cors", + "laravel", + "symfony" ], "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://fruitcake.nl", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/barryvdh", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2023-10-12T05:21:21+00:00" }, { - "name": "composer/semver", - "version": "3.3.2", + "name": "graham-campbell/result-type", + "version": "v1.1.2", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Semver\\": "src" + "GrahamCampbell\\ResultType\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -611,77 +605,86 @@ ], "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" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "An Implementation Of The Result Type", "keywords": [ - "semantic", - "semver", - "validation", - "versioning" + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/GrahamCampbell", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { - "name": "composer/xdebug-handler", - "version": "3.0.3", + "name": "guzzlehttp/guzzle", + "version": "7.8.1", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { - "composer/pcre": "^1 || ^2 || ^3", + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Composer\\XdebugHandler\\": "src" + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -690,63 +693,104 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "Restarts a process without Xdebug.", + "description": "Guzzle is a PHP HTTP client library", "keywords": [ - "Xdebug", - "performance" + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" ], "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" + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" + "url": "https://github.com/GrahamCampbell", + "type": "github" }, { - "url": "https://github.com/composer", + "url": "https://github.com/Nyholm", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { - "name": "danharrin/livewire-rate-limiting", - "version": "v1.1.0", + "name": "guzzlehttp/promises", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/danharrin/livewire-rate-limiting.git", - "reference": "a55996683cabf2e93893280d602191243b3b80b8" + "url": "https://github.com/guzzle/promises.git", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/a55996683cabf2e93893280d602191243b3b80b8", - "reference": "a55996683cabf2e93893280d602191243b3b80b8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "shasum": "" }, "require": { - "illuminate/support": "^9.0|^10.0", - "php": "^8.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "livewire/livewire": "^2.3", - "orchestra/testbench": "^7.0|^8.0", - "phpunit/phpunit": "^9.0|^10.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, "autoload": { "psr-4": { - "DanHarrin\\LivewireRateLimiting\\": "src" + "GuzzleHttp\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -755,57 +799,92 @@ ], "authors": [ { - "name": "Dan Harrin", - "email": "dan@danharrin.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "Apply rate limiters to Laravel Livewire actions.", - "homepage": "https://github.com/danharrin/livewire-rate-limiting", + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], "support": { - "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", - "source": "https://github.com/danharrin/livewire-rate-limiting" + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.2" }, "funding": [ { - "url": "https://github.com/danharrin", + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" } ], - "time": "2023-03-12T12:17:29+00:00" + "time": "2023-12-03T20:19:20+00:00" }, { - "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "name": "guzzlehttp/psr7", + "version": "2.6.2", "source": { "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "url": "https://github.com/guzzle/psr7.git", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.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" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { "psr-4": { - "Dflydev\\DotAccessData\\": "src/" + "GuzzleHttp\\Psr7\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -814,216 +893,105 @@ ], "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": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "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": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" }, { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" }, { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" }, { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" ], "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.2" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" + "url": "https://github.com/GrahamCampbell", + "type": "github" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/Nyholm", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", "type": "tidelift" } ], - "time": "2022-05-20T20:07:39+00:00" + "time": "2023-12-03T20:05:35+00:00" }, { - "name": "doctrine/dbal", - "version": "3.6.2", + "name": "guzzlehttp/uri-template", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "doctrine/coding-standard": "11.1.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.10.9", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.6", - "psalm/plugin-phpunit": "0.18.4", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.30.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, "autoload": { "psr-4": { - "Doctrine\\DBAL\\": "src" + "GuzzleHttp\\UriTemplate\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1032,3046 +1000,232 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" }, { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" } ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "description": "A polyfill class for uri_template of PHP", "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" + "guzzlehttp", + "uri-template" ], "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.2" + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" + "url": "https://github.com/GrahamCampbell", + "type": "github" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/Nyholm", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", "type": "tidelift" } ], - "time": "2023-04-14T07:25:38+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-12-03T19:50:20+00:00" }, { - "name": "doctrine/event-manager", - "version": "1.2.0", + "name": "laravel/framework", + "version": "v11.0.5", "source": { "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "url": "https://github.com/laravel/framework.git", + "reference": "9d9d74b1b690c944b8a3d0ebaf28f79101da1589" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/laravel/framework/zipball/9d9d74b1b690c944b8a3d0ebaf28f79101da1589", + "reference": "9d9d74b1b690c944b8a3d0ebaf28f79101da1589", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.15", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" }, "conflict": { - "doctrine/common": "<2.9" + "mockery/mockery": "1.6.8", + "tightenco/collect": "<5.5.33" }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "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": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.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%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:51:15+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "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" - }, - "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.6" - }, - "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": "2022-10-20T09:10:12+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": "dragonmantank/cron-expression", - "version": "v3.3.2", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2022-09-10T18:51:20+00:00" - }, - { - "name": "egulias/email-validator", - "version": "3.2.5", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b531a2311709443320c786feb4519cfaf94af796" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796", - "reference": "b531a2311709443320c786feb4519cfaf94af796", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.2|^2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.5" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2023-01-02T17:26:14+00:00" - }, - { - "name": "fakerphp/faker", - "version": "v1.21.0", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" - }, - "time": "2022-12-13T13:54:32+00:00" - }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "PHP classes for the Language Server Protocol", - "keywords": [ - "language", - "microsoft", - "php", - "server" - ], - "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" - }, - "time": "2022-03-02T22:36:06+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "0.5.1", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.26 || ^8.5.31", - "theofidry/php-cs-fixer-config": "^1.0", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2022-12-24T12:35:10+00:00" - }, - { - "name": "fruitcake/laravel-cors", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", - "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", - "shasum": "" - }, - "require": { - "asm89/stack-cors": "^2.0.1", - "illuminate/contracts": "^6|^7|^8|^9", - "illuminate/support": "^6|^7|^8|^9", - "php": ">=7.2" - }, - "require-dev": { - "laravel/framework": "^6|^7.24|^8", - "orchestra/testbench-dusk": "^4|^5|^6|^7", - "phpunit/phpunit": "^6|^7|^8|^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - }, - "laravel": { - "providers": [ - "Fruitcake\\Cors\\CorsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", - "keywords": [ - "api", - "cors", - "crossdomain", - "laravel" - ], - "support": { - "issues": "https://github.com/fruitcake/laravel-cors/issues", - "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "abandoned": true, - "time": "2022-02-23T14:25:13+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2022-02-20T15:07:15+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": "guzzlehttp/guzzle", - "version": "7.5.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9", - "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2023-04-17T16:30:08+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2022-08-28T14:55:35+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.5.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2023-04-17T16:11:26+00:00" - }, - { - "name": "guzzlehttp/uri-template", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.19 || ^9.5.8", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2021-10-07T12:57:01+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "hi-folks/lara-lens", - "version": "v0.4.0", - "source": { - "type": "git", - "url": "https://github.com/Hi-Folks/lara-lens.git", - "reference": "0248c307d712e6d170977952ccc8f8dead660372" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Hi-Folks/lara-lens/zipball/0248c307d712e6d170977952ccc8f8dead660372", - "reference": "0248c307d712e6d170977952ccc8f8dead660372", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/guzzle": "^7.0", - "illuminate/support": "v8.75.0|^9.0|^10.0", - "nunomaduro/termwind": "^1.13", - "php": "^8.0|^8.1|^8.2" - }, - "require-dev": { - "doctrine/dbal": "^3.0", - "laravel/pint": "^1.4", - "nunomaduro/larastan": "^1.0.0|^2.0", - "orchestra/testbench": "^6.23.2|^7.0|^8.0", - "pestphp/pest": "^1.22", - "pestphp/pest-plugin-laravel": "^1.2", - "phpunit/phpunit": "^9.5.10", - "psalm/plugin-laravel": "^1.6.2", - "vimeo/psalm": "^4.11" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "HiFolks\\LaraLens\\LaraLensServiceProvider" - ], - "aliases": { - "LaraLens": "HiFolks\\LaraLens\\LaraLensFacade" - } - } - }, - "autoload": { - "psr-4": { - "HiFolks\\LaraLens\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roberto Butti", - "role": "Developer" - } - ], - "description": "Laravel Diagnostic command for configuration, db connection, http request", - "homepage": "https://github.com/hi-folks/lara-lens", - "keywords": [ - "cli", - "command-line", - "console", - "diagnostic", - "hi-folks", - "lara-lens", - "laravel", - "package" - ], - "support": { - "issues": "https://github.com/Hi-Folks/lara-lens/issues", - "source": "https://github.com/Hi-Folks/lara-lens/tree/v0.4.0" - }, - "time": "2023-02-04T11:01:39+00:00" - }, - { - "name": "laravel/framework", - "version": "v9.52.7", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "675ea868fe36b18c8303e954aac540e6b1caa677" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/675ea868fe36b18c8303e954aac540e6b1caa677", - "reference": "675ea868fe36b18c8303e954aac540e6b1caa677", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", - "egulias/email-validator": "^3.2.1|^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-session": "*", - "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", - "guzzlehttp/uri-template": "^1.0", - "laravel/serializable-closure": "^1.2.2", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.62.1", - "nunomaduro/termwind": "^1.13", - "php": "^8.0.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^6.0.9", - "symfony/error-handler": "^6.0", - "symfony/finder": "^6.0", - "symfony/http-foundation": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/mailer": "^6.0", - "symfony/mime": "^6.0", - "symfony/process": "^6.0", - "symfony/routing": "^6.0", - "symfony/uid": "^6.0", - "symfony/var-dumper": "^6.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^2.13.3|^3.1.4", - "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.24", - "pda/pheanstalk": "^4.0", - "phpstan/phpdoc-parser": "^1.15", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9|^2.0.2", - "symfony/cache": "^6.0", - "symfony/http-client": "^6.0" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-apcu": "Required to use the APC cache driver.", - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", - "ext-pdo": "Required to use all database features.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-04-25T13:44:05+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "nesbot/carbon": "^2.61", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2023-01-30T18:31:20+00:00" - }, - { - "name": "laravel/tinker", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", - "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", - "shasum": "" - }, - "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.10.4|^0.11.1", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0" - }, - "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", - "phpunit/phpunit": "^8.5.8|^9.3.3" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], - "support": { - "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.8.1" - }, - "time": "2023-02-15T16:40:09+00:00" - }, - { - "name": "league/commonmark", - "version": "2.4.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d44a24690f16b8c1808bf13b1bd54ae4c63ea048", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048", - "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-03-24T15:16:10+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": "league/flysystem", - "version": "3.15.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a141d430414fcb8bf797a18716b09f759a385bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed", - "reference": "a141d430414fcb8bf797a18716b09f759a385bed", - "shasum": "" - }, - "require": { - "league/flysystem-local": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "aws/aws-sdk-php": "3.209.31 || 3.210.0", - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1", - "phpseclib/phpseclib": "3.0.15", - "symfony/http-client": "<5.2" - }, - "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.1", - "aws/aws-sdk-php": "^3.220.0", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.5", - "google/cloud-storage": "^1.23", - "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.14", - "phpstan/phpstan": "^0.12.26", - "phpunit/phpunit": "^9.5.11", - "sabre/dav": "^4.3.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "File storage abstraction for PHP", - "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.15.1" - }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-05-04T09:04:26+00:00" - }, - { - "name": "league/flysystem-local", - "version": "3.15.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3", - "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/flysystem": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\Local\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Local filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "file", - "files", - "filesystem", - "local" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.15.0" - }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-05-02T20:02:14+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-04-17T13:12:02+00:00" - }, - { - "name": "livewire/livewire", - "version": "v2.12.3", - "source": { - "type": "git", - "url": "https://github.com/livewire/livewire.git", - "reference": "019b1e69d8cd8c7e749eba7a38e4fa69ecbc8f74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/019b1e69d8cd8c7e749eba7a38e4fa69ecbc8f74", - "reference": "019b1e69d8cd8c7e749eba7a38e4fa69ecbc8f74", - "shasum": "" - }, - "require": { - "illuminate/database": "^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "^7.0|^8.0|^9.0|^10.0", - "illuminate/validation": "^7.0|^8.0|^9.0|^10.0", - "league/mime-type-detection": "^1.9", - "php": "^7.2.5|^8.0", - "symfony/http-kernel": "^5.0|^6.0" - }, - "require-dev": { - "calebporzio/sushi": "^2.1", - "laravel/framework": "^7.0|^8.0|^9.0|^10.0", - "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0", - "orchestra/testbench-dusk": "^5.2|^6.0|^7.0|^8.0", - "phpunit/phpunit": "^8.4|^9.0", - "psy/psysh": "@stable" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Livewire\\LivewireServiceProvider" - ], - "aliases": { - "Livewire": "Livewire\\Livewire" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Livewire\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Caleb Porzio", - "email": "calebporzio@gmail.com" - } - ], - "description": "A front-end framework for Laravel.", - "support": { - "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v2.12.3" - }, - "funding": [ - { - "url": "https://github.com/livewire", - "type": "github" - } - ], - "time": "2023-03-03T20:12:38+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.1" - }, - "time": "2022-09-07T15:32:08+00:00" - }, - { - "name": "monolog/monolog", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2023-02-06T13:44:46+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": "nesbot/carbon", - "version": "2.66.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "496712849902241f04902033b0441b269effe001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", - "reference": "496712849902241f04902033b0441b269effe001", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.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-01-29T18:53:47+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v4.2.0", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" - }, - "time": "2023-04-09T17:37:40+00:00" - }, - { - "name": "nette/schema", - "version": "v1.2.3", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "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.3" - }, - "time": "2022-10-13T01:24:26+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", - "shasum": "" - }, - "require": { - "php": ">=8.0 <8.3" + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "ext-gmp": "*", + "fakerphp/faker": "^1.23", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.6", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.0", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.5|^11.0", + "predis/predis": "^2.0.2", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" }, "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "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.0" - }, - "time": "2023-02-02T10:41:53+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.15.4", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "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" + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.6).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.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.15.4" - }, - "time": "2023-03-05T19:49:14+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v1.15.1", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" - }, - "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] + "dev-master": "11.x-dev" } }, "autoload": { "files": [ - "src/Functions.php" + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" ], "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2023-02-08T01:06:31+00:00" - }, - { - "name": "orchestra/testbench", - "version": "v7.24.1", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "6c38cf3d6a3523a25974d8457ca94439eaf12ab0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/6c38cf3d6a3523a25974d8457ca94439eaf12ab0", - "reference": "6c38cf3d6a3523a25974d8457ca94439eaf12ab0", - "shasum": "" - }, - "require": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^9.52.4", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.24.1", - "php": "^8.0", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ray": "^1.32.4", - "symfony/process": "^6.0.9", - "symfony/yaml": "^6.0.9", - "vlucas/phpdotenv": "^5.4.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.0-dev" + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -4080,76 +1234,59 @@ ], "authors": [ { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" + "framework", + "laravel" ], "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v7.24.1" + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" }, - "time": "2023-04-03T01:22:44+00:00" + "time": "2024-03-13T16:21:22+00:00" }, { - "name": "orchestra/testbench-core", - "version": "v7.24.3", + "name": "laravel/prompts", + "version": "v0.1.16", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "78d2245cd542b0ed69407eaae7e8e42abddb07a2" + "url": "https://github.com/laravel/prompts.git", + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/78d2245cd542b0ed69407eaae7e8e42abddb07a2", - "reference": "78d2245cd542b0ed69407eaae7e8e42abddb07a2", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781", + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781", "shasum": "" }, "require": { - "php": "^8.0" + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^9.52.4", - "laravel/pint": "^1.4", - "mockery/mockery": "^1.5.1", - "orchestra/canvas": "^7.0", - "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ray": "^1.32.4", - "symfony/process": "^6.0.9", - "symfony/yaml": "^6.0.9", - "vlucas/phpdotenv": "^5.4.1" + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" }, "suggest": { - "brianium/paratest": "Allow using parallel tresting (^6.4).", - "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^9.52.4).", - "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.2).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^7.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^7.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.10).", - "symfony/yaml": "Required for CLI Commander (^6.0.9).", - "vlucas/phpdotenv": "Required for CLI Commander (^5.4.1)." + "ext-pcntl": "Required for the spinner to be animated." }, - "bin": [ - "testbench" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-main": "0.1.x-dev" } }, "autoload": { @@ -4157,173 +1294,120 @@ "src/helpers.php" ], "psr-4": { - "Orchestra\\Testbench\\": "src/" + "Laravel\\Prompts\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", - "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" - ], "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.16" }, - "time": "2023-04-27T01:11:38+00:00" + "time": "2024-02-21T19:25:27+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.3", + "name": "laravel/serializable-closure", + "version": "v1.3.3", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Nuno Maduro", + "email": "nuno@laravel.com" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" }, - "time": "2021-07-20T11:28:43+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "laravel/tinker", + "version": "v2.9.0", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/laravel/tinker.git", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", "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": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" }, - "require": { - "php": "^7.2 || ^8.0" + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." }, "type": "library", "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "Laravel\\Tinker\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4332,473 +1416,651 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Powerful REPL for the Laravel framework.", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "REPL", + "Tinker", + "laravel", + "psysh" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.9.0" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2024-01-04T16:10:04+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "league/commonmark", + "version": "2.4.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "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": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.3", + "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 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.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-master": "5.x-dev" + "dev-main": "2.5-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "League\\CommonMark\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "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" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2024-02-02T11:59:32+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.7.1", + "name": "league/config", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714" + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" }, "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" + "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-1.x": "1.x-dev" + "dev-main": "1.2-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "League\\Config\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "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": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" + "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" }, - "time": "2023-03-27T19:02:04+00:00" + "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": "phplang/scope-exit", - "version": "1.0.0", + "name": "league/flysystem", + "version": "3.25.0", "source": { "type": "git", - "url": "https://github.com/phplang/scope-exit.git", - "reference": "239b73abe89f9414aa85a7ca075ec9445629192b" + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "4c44347133618cccd9b3df1729647a1577b4ad99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phplang/scope-exit/zipball/239b73abe89f9414aa85a7ca075ec9445629192b", - "reference": "239b73abe89f9414aa85a7ca075ec9445629192b", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4c44347133618cccd9b3df1729647a1577b4ad99", + "reference": "4c44347133618cccd9b3df1729647a1577b4ad99", "shasum": "" }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, "require-dev": { - "phpunit/phpunit": "*" + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { "psr-4": { - "PhpLang\\": "src/" + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "MIT" ], "authors": [ { - "name": "Sara Golemon", - "email": "pollita@php.net", - "homepage": "https://twitter.com/SaraMG", - "role": "Developer" + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" } ], - "description": "Emulation of SCOPE_EXIT construct from C++", - "homepage": "https://github.com/phplang/scope-exit", + "description": "File storage abstraction for PHP", "keywords": [ - "cleanup", - "exit", - "scope" + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" ], "support": { - "issues": "https://github.com/phplang/scope-exit/issues", - "source": "https://github.com/phplang/scope-exit/tree/master" + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.25.0" }, - "time": "2016-09-17T00:15:18+00:00" + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2024-03-09T17:06:45+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.9.1", + "name": "league/flysystem-local", + "version": "3.23.1", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00", + "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00", "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" + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" }, "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, "autoload": { "psr-4": { - "PhpOption\\": "src/PhpOption/" + "League\\Flysystem\\Local\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "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" + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" } ], - "description": "Option Type for PHP", + "description": "Local filesystem adapter for Flysystem.", "keywords": [ - "language", - "option", - "php", - "type" + "Flysystem", + "file", + "files", + "filesystem", + "local" ], "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", - "type": "github" + "url": "https://ecologi.com/frankdejonge", + "type": "custom" }, { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" + "url": "https://github.com/frankdejonge", + "type": "github" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2024-01-26T18:25:23+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "1.20.4", + "name": "league/mime-type-detection", + "version": "1.15.0", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "7d568c87a9df9c5f7e8b5f075fc469aa8cb0a4cd" + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7d568c87a9df9c5f7e8b5f075fc469aa8cb0a4cd", - "reference": "7d568c87a9df9c5f7e8b5f075fc469aa8cb0a4cd", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" }, "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, "type": "library", "autoload": { "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "League\\MimeTypeDetection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.20.4" + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" }, - "time": "2023-05-02T09:19:37+00:00" + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-01-28T23:22:08+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.26", + "name": "monolog/monolog", + "version": "3.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + "url": "https://github.com/Seldaek/monolog.git", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", "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" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.1", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Monolog\\": "src/Monolog" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ - "coverage", - "testing", - "xunit" + "log", + "logging", + "psr-3" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.5.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/Seldaek", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" } ], - "time": "2023-03-06T12:58:08+00:00" + "time": "2023-10-27T15:32:31+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "name": "nesbot/carbon", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "34ccf6f6b49c915421c7886c88c0cb77f3ebbfd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/34ccf6f6b49c915421c7886c88c0cb77f3ebbfd2", + "reference": "34ccf6f6b49c915421c7886c88c0cb77f3ebbfd2", "shasum": "" }, "require": { - "php": ">=7.3" + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.18.0", + "kylekatarnls/multi-tester": "^2.2.0", + "ondrejmirtes/better-reflection": "^6.11.0.0", + "phpmd/phpmd": "^2.13.0", + "phpstan/extension-installer": "^1.3.0", + "phpstan/phpstan": "^1.10.20", + "phpunit/phpunit": "^10.2.2", + "squizlabs/php_codesniffer": "^3.7.2" }, + "bin": [ + "bin/carbon" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Carbon\\": "src/Carbon/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", "keywords": [ - "filesystem", - "iterator" + "date", + "datetime", + "time" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2021-12-02T12:48:52+00:00" + "time": "2024-03-13T12:42:37+00:00" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", + "name": "nette/schema", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "url": "https://github.com/nette/schema.git", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", "shasum": "" }, "require": { - "php": ">=7.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" + "nette/tester": "^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -4808,56 +2070,71 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", "keywords": [ - "process" + "config", + "nette" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-12-11T11:54:22+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "nette/utils", + "version": "v4.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/nette/utils.git", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "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": "2.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4867,52 +2144,71 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "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": [ - "template" + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.4" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2024-01-17T16:50:36+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "nikic/php-parser", + "version": "v5.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { @@ -4920,9 +2216,9 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4930,283 +2226,204 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nikita Popov" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "A PHP parser written in PHP", "keywords": [ - "timer" + "parser", + "php" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.6.7", + "name": "nunomaduro/termwind", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2" + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", - "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", "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.13", - "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" + "php": "^8.2", + "symfony/console": "^7.0.4" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, "branch-alias": { - "dev-master": "9.6-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "files": [ - "src/Framework/Assert/Functions.php" + "src/Functions.php" ], - "classmap": [ - "src/" - ] + "psr-4": { + "Termwind\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Its like Tailwind CSS, but for the console.", "keywords": [ - "phpunit", - "testing", - "xunit" + "cli", + "console", + "css", + "package", + "php", + "style" ], "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.7" + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/nunomaduro", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://github.com/xiCO2k", + "type": "github" } ], - "time": "2023-04-14T08:58:40+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { - "name": "pimple/pimple", - "version": "v3.5.0", + "name": "phpoption/phpoption", + "version": "1.9.2", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "3.4.x-dev" + "dev-master": "1.9-dev" } }, "autoload": { - "psr-0": { - "Pimple": "src/" + "psr-4": { + "PhpOption\\": "src/PhpOption/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "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": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", + "description": "Option Type for PHP", "keywords": [ - "container", - "dependency injection" + "language", + "option", + "php", + "type" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" - }, - "time": "2021-10-28T11:13:42+00:00" - }, - { - "name": "psalm/plugin-laravel", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/psalm/psalm-plugin-laravel.git", - "reference": "0b42a51f977d216e0b5d649f68346e2f324f4a55" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-laravel/zipball/0b42a51f977d216e0b5d649f68346e2f324f4a55", - "reference": "0b42a51f977d216e0b5d649f68346e2f324f4a55", - "shasum": "" - }, - "require": { - "barryvdh/laravel-ide-helper": "^2.13", - "ext-simplexml": "*", - "illuminate/config": "^9.48 || ^10.0", - "illuminate/container": "^9.48 || ^10.0", - "illuminate/contracts": "^9.48 || ^10.0", - "illuminate/database": "^9.48 || ^10.0", - "illuminate/events": "^9.48 || ^10.0", - "illuminate/http": "^9.48 || ^10.0", - "illuminate/routing": "^9.48 || ^10.0", - "illuminate/support": "^9.48 || ^10.0", - "illuminate/view": "^9.48 || ^10.0", - "nikic/php-parser": "^4.13", - "orchestra/testbench": "^7.19 || ^8.0", - "php": "^8.0.2", - "symfony/console": "^6.0", - "vimeo/psalm": "^4.30 || ^5.1" - }, - "require-dev": { - "codeception/codeception": "^5.0", - "codeception/module-asserts": "^3.0", - "codeception/module-cli": "^2.0", - "codeception/module-filesystem": "^3.0", - "codeception/module-phpbrowser": "^3.0", - "phpunit/phpunit": "^9.6 || ^10.0", - "ramsey/collection": "^1.3", - "slevomat/coding-standard": "^8.8", - "squizlabs/php_codesniffer": "*", - "symfony/http-foundation": "^6.0" - }, - "type": "psalm-plugin", - "extra": { - "psalm": { - "pluginClass": "Psalm\\LaravelPlugin\\Plugin" - } - }, - "autoload": { - "psr-4": { - "Psalm\\LaravelPlugin\\": "src" - } + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, { - "name": "Matthew Brown", - "email": "github@muglug.com" + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" } ], - "description": "A Laravel plugin for Psalm", - "homepage": "https://github.com/psalm/psalm-plugin-laravel", - "support": { - "issues": "https://github.com/psalm/psalm-plugin-laravel/issues", - "source": "https://github.com/psalm/psalm-plugin-laravel/tree/v2.8.0" - }, - "time": "2023-02-26T18:23:48+00:00" + "time": "2023-11-12T21:59:55+00:00" }, { - "name": "psr/cache", - "version": "3.0.0", + "name": "psr/clock", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": "^7.0 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "Psr\\Clock\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5219,16 +2436,20 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interface for caching libraries", + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", "keywords": [ - "cache", + "clock", + "now", "psr", - "psr-6" + "psr-20", + "time" ], "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" }, - "time": "2021-02-03T23:26:27+00:00" + "time": "2022-11-25T14:36:26+00:00" }, { "name": "psr/container", @@ -5335,16 +2556,16 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { @@ -5381,9 +2602,9 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", @@ -5596,25 +2817,25 @@ }, { "name": "psy/psysh", - "version": "v0.11.17", + "version": "v0.12.0", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "3dc5d4018dabd80bceb8fe1e3191ba8460569f0a" + "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3dc5d4018dabd80bceb8fe1e3191ba8460569f0a", - "reference": "3dc5d4018dabd80bceb8fe1e3191ba8460569f0a", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", + "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" @@ -5625,8 +2846,7 @@ "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ "bin/psysh" @@ -5634,7 +2854,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.11.x-dev" + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false } }, "autoload": { @@ -5666,9 +2890,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.17" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" }, - "time": "2023-05-05T20:02:42+00:00" + "time": "2023-12-20T15:28:09+00:00" }, { "name": "ralouphie/getallheaders", @@ -5716,21 +2940,20 @@ }, { "name": "ramsey/collection", - "version": "1.3.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { "captainhook/plugin-composer": "^5.3", @@ -5790,7 +3013,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.3.0" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -5802,20 +3025,20 @@ "type": "tidelift" } ], - "time": "2022-12-27T19:12:24+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { @@ -5882,7 +3105,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.4" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -5894,999 +3117,1146 @@ "type": "tidelift" } ], - "time": "2023-04-15T23:01:58+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" + "time": "2023-11-08T05:53:05+00:00" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", + "name": "symfony/clock", + "version": "v7.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "url": "https://github.com/symfony/clock.git", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/symfony/clock/zipball/8b9d08887353d627d5f6c3bf3373b398b49051c2", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "provide": { + "psr/clock-implementation": "1.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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": "Nicolas Grekas", + "email": "p@tchwork.com" + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/symfony/clock/tree/v7.0.5" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2024-03-02T12:46:12+00:00" }, { - "name": "sebastian/comparator", - "version": "4.0.8", + "name": "symfony/console", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "url": "https://github.com/symfony/console.git", + "reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/symfony/console/zipball/6b099f3306f7c9c2d2786ed736d0026b2903205f", + "reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", "keywords": [ - "comparator", - "compare", - "equality" + "cli", + "command-line", + "console", + "terminal" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "source": "https://github.com/symfony/console/tree/v7.0.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { - "name": "sebastian/complexity", - "version": "2.0.2", + "name": "symfony/css-selector", + "version": "v7.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "url": "https://github.com/symfony/css-selector.git", + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be", + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=8.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/symfony/css-selector/tree/v7.0.3" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.5", + "name": "symfony/deprecation-contracts", + "version": "v3.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" + "files": [ + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-05-07T05:35:17+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { - "name": "sebastian/environment", - "version": "5.1.5", + "name": "symfony/error-handler", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "url": "https://github.com/symfony/error-handler.git", + "reference": "677b24759decff69e65b1e9d1471d90f95ced880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/677b24759decff69e65b1e9d1471d90f95ced880", + "reference": "677b24759decff69e65b1e9d1471d90f95ced880", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, - "suggest": { - "ext-posix": "*" + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "source": "https://github.com/symfony/error-handler/tree/v7.0.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T06:03:51+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { - "name": "sebastian/exporter", - "version": "4.0.5", + "name": "symfony/event-dispatcher", + "version": "v7.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "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": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { - "name": "sebastian/global-state", - "version": "5.0.5", + "name": "symfony/event-dispatcher-contracts", + "version": "v3.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "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": "*" + "php": ">=8.1", + "psr/event-dispatcher": "^1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "global state" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-14T08:28:10+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.3", + "name": "symfony/finder", + "version": "v7.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "url": "https://github.com/symfony/finder.git", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "4.0.4", + "name": "symfony/http-foundation", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "439fdfdd344943254b1ef6278613e79040548045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/439fdfdd344943254b1ef6278613e79040548045", + "reference": "439fdfdd344943254b1ef6278613e79040548045", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/symfony/http-foundation/tree/v7.0.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2024-02-08T19:22:56+00:00" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "symfony/http-kernel", + "version": "v7.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "37c24ca28f65e3121a68f3dd4daeb36fb1fa2a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/37c24ca28f65e3121a68f3dd4daeb36fb1fa2a72", + "reference": "37c24ca28f65e3121a68f3dd4daeb36fb1fa2a72", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/symfony/http-kernel/tree/v7.0.5" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2024-03-04T21:05:24+00:00" }, { - "name": "sebastian/recursion-context", - "version": "4.0.5", + "name": "symfony/mailer", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "url": "https://github.com/symfony/mailer.git", + "reference": "72e16d87bf50a3ce195b9470c06bb9d7b816ea85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/symfony/mailer/zipball/72e16d87bf50a3ce195b9470c06bb9d7b816ea85", + "reference": "72e16d87bf50a3ce195b9470c06bb9d7b816ea85", "shasum": "" }, "require": { - "php": ">=7.3" + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", + "description": "Helps sending emails", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + "source": "https://github.com/symfony/mailer/tree/v7.0.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T06:07:39+00:00" + "time": "2024-02-03T21:34:19+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "symfony/mime", + "version": "v7.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/symfony/mime.git", + "reference": "c1ffe24ba6fdc3e3f0f3fcb93519103b326a3716" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/symfony/mime/zipball/c1ffe24ba6fdc3e3f0f3fcb93519103b326a3716", + "reference": "c1ffe24ba6fdc3e3f0f3fcb93519103b326a3716", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/symfony/mime/tree/v7.0.3" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-01-30T08:34:29+00:00" }, { - "name": "sebastian/type", - "version": "3.2.1", + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.5" + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.2-dev" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T06:13:03+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.0-dev" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "spatie/array-to-xml", - "version": "3.1.5", + "name": "symfony/polyfill-intl-idn", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "13f76acef5362d15c71ae1ac6350cc3df5e25e43" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/13f76acef5362d15c71ae1ac6350cc3df5e25e43", - "reference": "13f76acef5362d15c71ae1ac6350cc3df5e25e43", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", "shasum": "" }, "require": { - "ext-dom": "*", - "php": "^8.0" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, - "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "spatie/pest-plugin-snapshots": "^1.1" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Spatie\\ArrayToXml\\": "src" + "Symfony\\Polyfill\\Intl\\Idn\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -6895,62 +4265,84 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev", - "role": "Developer" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", "keywords": [ - "array", - "convert", - "xml" + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.1.5" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/spatie", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-12-24T13:43:51+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "spatie/backtrace", - "version": "1.4.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/ec4dd16476b802dbdc6b4467f84032837e316b8c", - "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": ">=7.1" }, - "require-dev": { - "ext-json": "*", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2", - "symfony/var-dumper": "^5.1" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Spatie\\Backtrace\\": "src" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6958,82 +4350,79 @@ ], "authors": [ { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", "keywords": [ - "Backtrace", - "spatie" + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.4.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { - "url": "https://github.com/sponsors/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://spatie.be/open-source/support-us", - "type": "other" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-03-04T08:57:24+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "spatie/laravel-ray", - "version": "1.32.4", + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/spatie/laravel-ray.git", - "reference": "2274653f0a90dd87fbb887437be1c1ea1388a47c" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/2274653f0a90dd87fbb887437be1c1ea1388a47c", - "reference": "2274653f0a90dd87fbb887437be1c1ea1388a47c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { - "ext-json": "*", - "illuminate/contracts": "^7.20|^8.19|^9.0|^10.0", - "illuminate/database": "^7.20|^8.19|^9.0|^10.0", - "illuminate/queue": "^7.20|^8.19|^9.0|^10.0", - "illuminate/support": "^7.20|^8.19|^9.0|^10.0", - "php": "^7.4|^8.0", - "spatie/backtrace": "^1.0", - "spatie/ray": "^1.37", - "symfony/stopwatch": "4.2|^5.1|^6.0", - "zbateson/mail-mime-parser": "^1.3.1|^2.0" + "php": ">=7.1" }, - "require-dev": { - "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20|^8.19|^9.0|^10.0", - "orchestra/testbench-core": "^5.0|^6.0|^7.0|^8.0", - "pestphp/pest": "^1.22", - "phpstan/phpstan": "^0.12.93", - "phpunit/phpunit": "^9.3", - "spatie/pest-plugin-snapshots": "^1.1" + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.29.x-dev" - }, - "laravel": { - "providers": [ - "Spatie\\LaravelRay\\RayServiceProvider" - ] + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Spatie\\LaravelRay\\": "src" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7042,58 +4431,72 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Easily debug Laravel apps", - "homepage": "https://github.com/spatie/laravel-ray", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "laravel-ray", - "spatie" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.32.4" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { - "url": "https://github.com/sponsors/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://spatie.be/open-source/support-us", - "type": "other" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-03-23T08:04:54+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "spatie/macroable", - "version": "2.0.0", + "name": "symfony/polyfill-php72", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/spatie/macroable.git", - "reference": "ec2c320f932e730607aff8052c44183cf3ecb072" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072", - "reference": "ec2c320f932e730607aff8052c44183cf3ecb072", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", "shasum": "" }, "require": { - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.3" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Spatie\\Macroable\\": "src" + "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7102,65 +4505,75 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A trait to dynamically add methods to a class", - "homepage": "https://github.com/spatie/macroable", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "macroable", - "spatie" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/spatie/macroable/issues", - "source": "https://github.com/spatie/macroable/tree/2.0.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" }, - "time": "2021-03-26T22:39:02+00:00" + "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": "2024-01-29T20:11:03+00:00" }, { - "name": "spatie/ray", - "version": "1.37.1", + "name": "symfony/polyfill-php80", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/spatie/ray.git", - "reference": "a915e327f04c0fbed3bdd26e076e39feea091062" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/a915e327f04c0fbed3bdd26e076e39feea091062", - "reference": "a915e327f04c0fbed3bdd26e076e39feea091062", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-json": "*", - "php": "^7.3|^8.0", - "ramsey/uuid": "^3.0|^4.1", - "spatie/backtrace": "^1.1", - "spatie/macroable": "^1.0|^2.0", - "symfony/stopwatch": "^4.0|^5.1|^6.0", - "symfony/var-dumper": "^4.2|^5.1|^6.0" - }, - "require-dev": { - "illuminate/support": "6.x|^8.18|^9.0", - "nesbot/carbon": "^2.63", - "pestphp/pest": "^1.22", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5", - "spatie/phpunit-snapshot-assertions": "^4.2", - "spatie/test-time": "^1.2" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { "files": [ - "src/helpers.php" + "bootstrap.php" ], "psr-4": { - "Spatie\\Ray\\": "src" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7168,59 +4581,80 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Debug with Ray to fix problems faster", - "homepage": "https://github.com/spatie/ray", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "ray", - "spatie" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.37.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { - "url": "https://github.com/sponsors/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://spatie.be/open-source/support-us", - "type": "other" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-03-06T07:22:28+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "swaggest/json-diff", - "version": "v3.10.4", + "name": "symfony/polyfill-php83", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/swaggest/json-diff.git", - "reference": "f4e511708060ff7511a3743fab4aa484a062bcfb" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swaggest/json-diff/zipball/f4e511708060ff7511a3743fab4aa484a062bcfb", - "reference": "f4e511708060ff7511a3743fab4aa484a062bcfb", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", "shasum": "" }, "require": { - "ext-json": "*" - }, - "require-dev": { - "phperf/phpunit": "4.8.37" + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Swaggest\\JsonDiff\\": "src/" - } + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7228,48 +4662,77 @@ ], "authors": [ { - "name": "Viacheslav Poturaev", - "email": "vearutop@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "JSON diff/rearrange/patch/pointer library for PHP", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/swaggest/json-diff/issues", - "source": "https://github.com/swaggest/json-diff/tree/v3.10.4" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" }, - "time": "2022-11-09T13:21:05+00:00" + "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": "2024-01-29T20:11:03+00:00" }, { - "name": "swaggest/json-schema", - "version": "v0.12.41", + "name": "symfony/polyfill-uuid", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/swaggest/php-json-schema.git", - "reference": "1bb97901314f828774dd8c5b21bff889ce0b34bb" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swaggest/php-json-schema/zipball/1bb97901314f828774dd8c5b21bff889ce0b34bb", - "reference": "1bb97901314f828774dd8c5b21bff889ce0b34bb", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", "shasum": "" }, "require": { - "ext-json": "*", - "php": ">=5.4", - "phplang/scope-exit": "^1.0", - "swaggest/json-diff": "^3.8.2", - "symfony/polyfill-mbstring": "^1.19" + "php": ">=7.1" }, - "require-dev": { - "phperf/phpunit": "4.8.37" + "provide": { + "ext-uuid": "*" }, "suggest": { - "ext-mbstring": "For better performance" + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, - "type": "library", "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Swaggest\\JsonSchema\\": "src/" + "Symfony\\Polyfill\\Uuid\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7278,67 +4741,62 @@ ], "authors": [ { - "name": "Viacheslav Poturaev", - "email": "vearutop@gmail.com" + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "High definition PHP structures with JSON-schema based validation", + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], "support": { - "email": "vearutop@gmail.com", - "issues": "https://github.com/swaggest/php-json-schema/issues", - "source": "https://github.com/swaggest/php-json-schema/tree/v0.12.41" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" }, - "time": "2022-08-17T11:21:43+00:00" + "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": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/console", - "version": "v6.0.19", + "name": "symfony/process", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" + "url": "https://github.com/symfony/process.git", + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9", + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9", "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": "" + "php": ">=8.2" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" + "Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7358,16 +4816,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.19" + "source": "https://github.com/symfony/process/tree/v7.0.4" }, "funding": [ { @@ -7383,29 +4835,43 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { - "name": "symfony/css-selector", - "version": "v6.0.19", + "name": "symfony/routing", + "version": "v7.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1" + "url": "https://github.com/symfony/routing.git", + "reference": "ba6bf07d43289c6a4b4591ddb75bc3bc5f069c19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/f1d00bddb83a4cb2138564b2150001cb6ce272b1", - "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "url": "https://api.github.com/repos/symfony/routing/zipball/ba6bf07d43289c6a4b4591ddb75bc3bc5f069c19", + "reference": "ba6bf07d43289c6a4b4591ddb75bc3bc5f069c19", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\CssSelector\\": "" + "Symfony\\Component\\Routing\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7420,19 +4886,21 @@ "name": "Fabien Potencier", "email": "fabien@symfony.com" }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Converts CSS selectors to XPath expressions", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.0.19" + "source": "https://github.com/symfony/routing/tree/v7.0.5" }, "funding": [ { @@ -7448,29 +4916,33 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-02-27T12:34:35+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v3.0.2", + "name": "symfony/service-contracts", + "version": "v3.4.1", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7478,8 +4950,11 @@ } }, "autoload": { - "files": [ - "function.php" + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7496,10 +4971,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "A generic function and convention to trigger deprecation notices", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -7515,39 +4998,46 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { - "name": "symfony/error-handler", - "version": "v6.0.19", + "name": "symfony/string", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67" + "url": "https://github.com/symfony/string.git", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c7df52182f43a68522756ac31a532dd5b1e6db67", - "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "php": ">=8.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.5" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" + "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7559,18 +5049,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides tools to manage errors and ease debugging PHP code", + "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/error-handler/tree/v6.0.19" + "source": "https://github.com/symfony/string/tree/v7.0.4" }, "funding": [ { @@ -7586,51 +5084,62 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-02-01T13:17:36+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v6.0.19", + "name": "symfony/translation", + "version": "v7.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" + "url": "https://github.com/symfony/translation.git", + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "url": "https://api.github.com/repos/symfony/translation/zipball/5b75e872f7d135d7abb4613809fadc8d9f3d30a0", + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.18|^5.0", "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": "" + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\Translation\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7650,10 +5159,10 @@ "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", + "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" + "source": "https://github.com/symfony/translation/tree/v7.0.4" }, "funding": [ { @@ -7669,33 +5178,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.2", + "name": "symfony/translation-contracts", + "version": "v3.4.1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "06450585bf65e978026bda220cdebca3f867fde7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", + "reference": "06450585bf65e978026bda220cdebca3f867fde7", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7704,8 +5209,11 @@ }, "autoload": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7721,7 +5229,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Generic abstractions related to translation", "homepage": "https://symfony.com", "keywords": [ "abstractions", @@ -7732,7 +5240,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" }, "funding": [ { @@ -7748,31 +5256,121 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { - "name": "symfony/filesystem", - "version": "v6.0.19", + "name": "symfony/uid", + "version": "v7.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" + "url": "https://github.com/symfony/uid.git", + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", + "url": "https://api.github.com/repos/symfony/uid/zipball/87cedaf3fabd7b733859d4d77aa4ca598259054b", + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T15:02:46+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "e03ad7c1535e623edbb94c22cc42353e488c6670" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e03ad7c1535e623edbb94c22cc42353e488c6670", + "reference": "e03ad7c1535e623edbb94c22cc42353e488c6670", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "autoload": { + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { - "Symfony\\Component\\Filesystem\\": "" + "Symfony\\Component\\VarDumper\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7784,18 +5382,22 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides basic utilities for the filesystem", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.19" + "source": "https://github.com/symfony/var-dumper/tree/v7.0.4" }, "funding": [ { @@ -7811,217 +5413,173 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-02-15T11:33:06+00:00" }, { - "name": "symfony/finder", - "version": "v6.0.19", + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", "shasum": "" }, "require": { - "php": ">=8.0.2" + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" } ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.19" + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" }, - "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" + "time": "2023-12-08T13:03:43+00:00" }, { - "name": "symfony/http-foundation", - "version": "v6.0.20", + "name": "vlucas/phpdotenv", + "version": "v5.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6" + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e16b2676a4b3b1fa12378a20b29c364feda2a8d6", - "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { - "symfony/mime": "To use the file extension guesser" + "ext-filter": "Required to use the boolean validator." }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Dotenv\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" } ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.0.20" + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/GrahamCampbell", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", "type": "tidelift" } ], - "time": "2023-01-30T15:41:07+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { - "name": "symfony/http-kernel", - "version": "v6.0.20", + "name": "voku/portable-ascii", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349" + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dc70833fd0ef5e861e17c7854c12d7d86679349", - "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/log": "^1|^2|^3", - "symfony/error-handler": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "php": ">=7.0.0" }, "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.13|^3.0.4" + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" }, "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" + "ext-intl": "Use Intl for transliterator_transliterate() support" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "voku\\": "src/voku/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8029,73 +5587,80 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" } ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.0.20" + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.me/moelleken", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/voku", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "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": "2023-02-01T08:22:55+00:00" + "time": "2022-03-08T17:03:00+00:00" }, { - "name": "symfony/mailer", - "version": "v6.0.19", + "name": "webmozart/assert", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "cd60799210c488f545ddde2444dc1aa548322872" + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/cd60799210c488f545ddde2444dc1aa548322872", - "reference": "cd60799210c488f545ddde2444dc1aa548322872", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.0.2", - "psr/event-dispatcher": "^1", - "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { - "symfony/http-kernel": "<5.4" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^5.4|^6.0" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Mailer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8103,77 +5668,77 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Helps sending emails", - "homepage": "https://symfony.com", + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], "support": { - "source": "https://github.com/symfony/mailer/tree/v6.0.19" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.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-11T11:50:03+00:00" - }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ { - "name": "symfony/mime", - "version": "v6.0.19", + "name": "brianium/paratest", + "version": "v7.4.3", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "d7052547a0070cbeadd474e172b527a00d657301" + "url": "https://github.com/paratestphp/paratest.git", + "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec" }, "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d7052547a0070cbeadd474e172b527a00d657301", - "reference": "d7052547a0070cbeadd474e172b527a00d657301", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6" + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", + "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", + "shasum": "" }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6" + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.1.0", + "jean85/pretty-package-versions": "^2.0.5", + "php": "~8.2.0 || ~8.3.0", + "phpunit/php-code-coverage": "^10.1.11 || ^11.0.0", + "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", + "phpunit/php-timer": "^6.0.0 || ^7.0.0", + "phpunit/phpunit": "^10.5.9 || ^11.0.3", + "sebastian/environment": "^6.0.1 || ^7.0.0", + "symfony/console": "^6.4.3 || ^7.0.3", + "symfony/process": "^6.4.3 || ^7.0.3" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^1.10.58", + "phpstan/phpstan-deprecation-rules": "^1.1.4", + "phpstan/phpstan-phpunit": "^1.3.15", + "phpstan/phpstan-strict-rules": "^1.5.2", + "squizlabs/php_codesniffer": "^3.9.0", + "symfony/filesystem": "^6.4.3 || ^7.0.3" }, + "bin": [ + "bin/paratest", + "bin/paratest.bat", + "bin/paratest_for_phpstorm" + ], "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "ParaTest\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8181,160 +5746,127 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" } ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", "keywords": [ - "mime", - "mime-type" + "concurrent", + "parallel", + "phpunit", + "testing" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.0.19" + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.4.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sponsors/Slamdunk", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" } ], - "time": "2023-01-11T11:50:03+00:00" + "time": "2024-02-20T07:24:02+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "name": "doctrine/deprecations", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.1 || ^8.0" }, - "provide": { - "ext-ctype": "*" + "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": { - "ext-ctype": "For best performance" + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "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" - ], + "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": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.27.0", + "name": "fakerphp/faker", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "927013f3aac555983a5059aada98e1907d842695" + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", - "reference": "927013f3aac555983a5059aada98e1907d842695", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, - "provide": { - "ext-iconv": "*" + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { - "ext-iconv": "For best performance" + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" + "Faker\\": "src/Faker/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8343,78 +5875,53 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "François Zaninotto" } ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" + "data", + "faker", + "fixtures" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "name": "fidry/cpu-core-counter", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.2 || ^8.0" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8423,81 +5930,63 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "CPU", + "core" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/theofidry", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-02-07T09:43:46+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "name": "filp/whoops", + "version": "2.15.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "url": "https://github.com/filp/whoops.git", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" }, "suggest": { - "ext-intl": "For best performance" + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.7-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" + "Whoops\\": "src/Whoops/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8506,170 +5995,118 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/denis-sokolov", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-11-03T12:00:00+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^5.3|^7.0|^8.0" }, - "suggest": { - "ext-intl": "For best performance" + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.1-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "classmap": [ - "Resources/stubs" + "hamcrest" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "BSD-3-Clause" ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" + "test" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "name": "jean85/pretty-package-versions", + "version": "2.0.6", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Jean85\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8678,75 +6115,62 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "A library to get pretty versions strings of installed dependencies", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "composer", + "package", + "release", + "versions" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-03-08T09:58:59+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.27.0", + "name": "laravel/pint", + "version": "v1.14.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "url": "https://github.com/laravel/pint.git", + "reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/laravel/pint/zipball/6b127276e3f263f7bb17d5077e9e0269e61b2a0e", + "reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.49.0", + "illuminate/view": "^10.43.0", + "larastan/larastan": "^2.8.1", + "laravel-zero/framework": "^10.3.0", + "mockery/mockery": "^1.6.7", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^2.33.6" }, + "bin": [ + "builds/pint" + ], + "type": "project", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8755,78 +6179,65 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "format", + "formatter", + "lint", + "linter", + "php" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-02-20T17:38:05+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "name": "laravel/sail", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "url": "https://github.com/laravel/sail.git", + "reference": "e40cc7ffb5186c45698dbd47e9477e0e429396d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/laravel/sail/zipball/e40cc7ffb5186c45698dbd47e9477e0e429396d0", + "reference": "e40cc7ffb5186c45698dbd47e9477e0e429396d0", "shasum": "" }, "require": { - "php": ">=7.1" + "illuminate/console": "^9.52.16|^10.0|^11.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0", + "illuminate/support": "^9.52.16|^10.0|^11.0", + "php": "^8.0", + "symfony/yaml": "^6.0|^7.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpstan/phpstan": "^1.10" }, + "bin": [ + "bin/sail" + ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Laravel\\Sail\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8834,231 +6245,216 @@ ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Docker files for running a basic Laravel application.", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "docker", + "laravel" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-03-08T16:32:33+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "name": "mockery/mockery", + "version": "1.6.9", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "url": "https://github.com/mockery/mockery.git", + "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", "shasum": "" }, "require": { - "php": ">=7.1" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.10", + "symplify/easy-coding-standard": "^12.0.8" }, + "type": "library", "autoload": { "files": [ - "bootstrap.php" + "library/helpers.php", + "library/Mockery.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Mockery\\": "library/Mockery" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-12-10T02:24:34+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.27.0", + "name": "myclabs/deep-copy", + "version": "1.11.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.1 || ^8.0" }, - "provide": { - "ext-uuid": "*" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, - "suggest": { - "ext-uuid": "For best performance" + "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", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "files": [ - "bootstrap.php" + "src/DeepCopy/deep_copy.php" ], "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { - "name": "symfony/process", - "version": "v6.0.19", + "name": "nunomaduro/collision", + "version": "v8.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" + "url": "https://github.com/nunomaduro/collision.git", + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/13e5d538b95a744d85f447a321ce10adb28e9af9", + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9", "shasum": "" }, "require": { - "php": ">=8.0.2" + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.1", + "php": "^8.2.0", + "symfony/console": "^7.0.4" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" + }, + "require-dev": { + "larastan/larastan": "^2.9.2", + "laravel/framework": "^11.0.0", + "laravel/pint": "^1.14.0", + "laravel/sail": "^1.28.2", + "laravel/sanctum": "^4.0.0", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.0.0", + "pestphp/pest": "^2.34.1 || ^3.0.0", + "sebastian/environment": "^6.0.1 || ^7.0.0" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "NunoMaduro\\Collision\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9066,81 +6462,115 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], "support": { - "source": "https://github.com/symfony/process/tree/v6.0.19" + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/nunomaduro", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-03-06T16:20:09+00:00" }, { - "name": "symfony/routing", - "version": "v6.0.19", + "name": "pestphp/pest", + "version": "v2.34.2", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac" + "url": "https://github.com/pestphp/pest.git", + "reference": "853f6efce6bc86636f48a0e921a44ccee9a66cf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e56ca9b41c1ec447193474cd86ad7c0b547755ac", - "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac", + "url": "https://api.github.com/repos/pestphp/pest/zipball/853f6efce6bc86636f48a0e921a44ccee9a66cf3", + "reference": "853f6efce6bc86636f48a0e921a44ccee9a66cf3", "shasum": "" }, "require": { - "php": ">=8.0.2" + "brianium/paratest": "^7.3.1", + "nunomaduro/collision": "^7.10.0|^8.1.1", + "nunomaduro/termwind": "^1.15.1|^2.0.1", + "pestphp/pest-plugin": "^2.1.1", + "pestphp/pest-plugin-arch": "^2.7.0", + "php": "^8.1.0", + "phpunit/phpunit": "^10.5.12" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "phpunit/phpunit": ">10.5.12", + "sebastian/exporter": "<5.1.0", + "webmozart/assert": "<1.11.0" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "pestphp/pest-dev-tools": "^2.16.0", + "pestphp/pest-plugin-type-coverage": "^2.8.1", + "symfony/process": "^6.4.0|^7.0.4" }, + "bin": [ + "bin/pest" + ], "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Pest\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9148,472 +6578,395 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", + "description": "The elegant PHP Testing Framework.", "keywords": [ - "router", - "routing", - "uri", - "url" + "framework", + "pest", + "php", + "test", + "testing", + "unit" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.0.19" + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v2.34.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/nunomaduro", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-03-11T18:05:47+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.0.2", + "name": "pestphp/pest-plugin", + "version": "v2.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/container": "^2.0" + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.1" }, "conflict": { - "ext-psr": "<1.1|>=2" + "pestphp/pest": "<2.2.3" }, - "suggest": { - "symfony/service-implementation": "" + "require-dev": { + "composer/composer": "^2.5.8", + "pestphp/pest": "^2.16.0", + "pestphp/pest-dev-tools": "^2.16.0" }, - "type": "library", + "type": "composer-plugin", "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "class": "Pest\\Plugin\\Manager" }, "autoload": { "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Pest\\Plugin\\": "src/" } }, "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", + "description": "The Pest plugin manager", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" + "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/nunomaduro", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2022-05-30T19:17:58+00:00" + "time": "2023-08-22T08:40:06+00:00" }, { - "name": "symfony/stopwatch", - "version": "v6.0.19", + "name": "pestphp/pest-plugin-arch", + "version": "v2.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/service-contracts": "^1|^2|^3" + "nunomaduro/collision": "^7.10.0|^8.1.0", + "pestphp/pest-plugin": "^2.1.1", + "php": "^8.1", + "ta-tikoma/phpunit-architecture-test": "^0.8.4" + }, + "require-dev": { + "pestphp/pest": "^2.33.0", + "pestphp/pest-dev-tools": "^2.16.0" }, "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, "autoload": { + "files": [ + "src/Autoload.php" + ], "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Pest\\Arch\\": "src/" + } }, "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": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/nunomaduro", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-01-26T09:46:42+00:00" }, { - "name": "symfony/string", - "version": "v6.0.19", + "name": "pestphp/pest-plugin-laravel", + "version": "v2.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "2f6ea6233bb74ec65d969ecdea56bdbd3d1e2f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/2f6ea6233bb74ec65d969ecdea56bdbd3d1e2f0e", + "reference": "2f6ea6233bb74ec65d969ecdea56bdbd3d1e2f0e", "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" + "laravel/framework": "^10.44.0|^11.0", + "pestphp/pest": "^2.33.6", + "php": "^8.1.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" + "laravel/dusk": "^7.12.3", + "orchestra/testbench": "^8.21.1|^9.0.0", + "pestphp/pest-dev-tools": "^2.16.0" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + }, + "pest": { + "plugins": [ + "Pest\\Laravel\\Plugin" + ] + } + }, "autoload": { "files": [ - "Resources/functions.php" + "src/Autoload.php" ], "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Pest\\Laravel\\": "src/" + } }, "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", + "description": "The Pest Laravel Plugin", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "framework", + "laravel", + "pest", + "php", + "test", + "testing", + "unit" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.19" + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v2.3.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/nunomaduro", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-02-17T10:04:08+00:00" }, { - "name": "symfony/translation", - "version": "v6.0.19", + "name": "phar-io/manifest", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", - "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "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": "" + "ext-dom": "*", + "ext-libxml": "*", + "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": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.19" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/theseer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { - "name": "symfony/translation-contracts", - "version": "v3.0.2", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282", - "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": ">=8.0.2" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": "^7.2 || ^8.0" }, "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\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "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" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "url": "https://github.com/fabpot", - "type": "github" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "time": "2022-06-27T17:10:44+00:00" + "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": "symfony/uid", - "version": "v6.0.19", + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", - "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/polyfill-uuid": "^1.15" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" + "php": "^7.2 || ^8.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9621,92 +6974,60 @@ ], "authors": [ { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "UID", - "ulid", - "uuid" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.0.19" + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" }, - "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" + "time": "2020-06-27T09:03:43+00:00" }, { - "name": "symfony/var-dumper", - "version": "v6.0.19", + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "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" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, - "bin": [ - "Resources/bin/var-dump-server" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, "autoload": { - "files": [ - "Resources/functions/dump.php" - ], "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9714,77 +7035,61 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.19" + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.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-20T17:44:14+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { - "name": "symfony/yaml", - "version": "v6.0.19", + "name": "phpdocumentor/type-resolver", + "version": "1.8.2", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "deec3a812a0305a50db8ae689b183f43d915c884" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/deec3a812a0305a50db8ae689b183f43d915c884", - "reference": "deec3a812a0305a50db8ae689b183f43d915c884", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, - "bin": [ - "Resources/bin/yaml-lint" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9792,118 +7097,110 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.0.19" + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.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": "2023-01-11T11:50:03+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.2.1", + "name": "phpstan/phpdoc-parser", + "version": "1.26.0", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "231e3186624c03d7e7c890ec662b81e6b0405227" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227", + "reference": "231e3186624c03d7e7c890ec662b81e6b0405227", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", "php": "^7.2 || ^8.0" }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } + "MIT" ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0" }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-02-23T16:05:55+00:00" }, { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", + "name": "phpunit/php-code-coverage", + "version": "10.1.14", "source": { "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-main": "10.1-dev" } }, "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9911,170 +7208,126 @@ ], "authors": [ { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "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/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, - "time": "2023-01-03T09:29:04+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-12T15:33:41+00:00" }, { - "name": "vimeo/psalm", - "version": "5.11.0", + "name": "phpunit/php-file-iterator", + "version": "4.1.0", "source": { "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "c9b192ab8400fdaf04b2b13d110575adc879aa90" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/c9b192ab8400fdaf04b2b13d110575adc879aa90", - "reference": "c9b192ab8400fdaf04b2b13d110575adc879aa90", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer-runtime-api": "^2", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", - "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.14", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0", - "sebastian/diff": "^4.0 || ^5.0", - "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0" - }, - "provide": { - "psalm/psalm": "self.version" + "php": ">=8.1" }, "require-dev": { - "amphp/phpunit-util": "^2.0", - "bamarni/composer-bin-plugin": "^1.4", - "brianium/paratest": "^6.9", - "ext-curl": "*", - "mockery/mockery": "^1.5", - "nunomaduro/mock-final-classes": "^1.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpdoc-parser": "^1.6", - "phpunit/phpunit": "^9.6", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0" + "phpunit/phpunit": "^10.0" }, - "suggest": { - "ext-curl": "In order to send data to shepherd", - "ext-igbinary": "^2.0.5 is required, used to serialize caching data" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalter" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev", - "dev-4.x": "4.x-dev", - "dev-3.x": "3.x-dev", - "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Matthew Brown" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A static analysis tool for finding errors in PHP applications", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "code", - "inspection", - "php", - "static analysis" + "filesystem", + "iterator" ], "support": { - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/5.11.0" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, - "time": "2023-05-04T21:35:44+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" }, { - "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "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" + "php": ">=8.1" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" }, "suggest": { - "ext-filter": "Required to use the boolean validator." + "ext-pcntl": "*" }, "type": "library", "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -10082,1477 +7335,1261 @@ ], "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" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "dotenv", - "env", - "environment" + "process" ], "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "voku/portable-ascii", - "version": "2.0.1", + "name": "phpunit/php-text-template", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "ascii", - "clean", - "php" + "template" ], "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", + "url": "https://github.com/sebastianbergmann", "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-03-08T17:03:00+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { - "name": "webmozart/assert", - "version": "1.11.0", + "name": "phpunit/php-timer", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-main": "6.0-dev" } }, "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "assert", - "check", - "validate" + "timer" ], "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, - "time": "2022-06-03T18:03:27+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" }, { - "name": "zbateson/mail-mime-parser", - "version": "2.4.0", + "name": "phpunit/phpunit", + "version": "10.5.12", "source": { "type": "git", - "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "41a9886b85ac7bf3929853baf96b95361cd69d2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/20b3e48eb799537683780bc8782fbbe9bc25934a", - "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41a9886b85ac7bf3929853baf96b95361cd69d2b", + "reference": "41a9886b85ac7bf3929853baf96b95361cd69d2b", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" + "ext-soap": "To be able to generate mocks based on WSDL files" }, + "bin": [ + "phpunit" + ], "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MailMimeParser\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" } }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "BSD-3-Clause" ], "authors": [ { - "name": "Zaahid Bateson" - }, - { - "name": "Contributors", - "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "MIME email message parser", - "homepage": "https://mail-mime-parser.org", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "MimeMailParser", - "email", - "mail", - "mailparse", - "mime", - "mimeparse", - "parser", - "php-imap" + "phpunit", + "testing", + "xunit" ], "support": { - "docs": "https://mail-mime-parser.org/#usage-guide", - "issues": "https://github.com/zbateson/mail-mime-parser/issues", - "source": "https://github.com/zbateson/mail-mime-parser" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.12" }, "funding": [ { - "url": "https://github.com/zbateson", + "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-02-14T22:58:03+00:00" + "time": "2024-03-09T12:04:07+00:00" }, { - "name": "zbateson/mb-wrapper", - "version": "1.2.0", + "name": "sebastian/cli-parser", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-iconv": "^1.9", - "symfony/polyfill-mbstring": "^1.9" + "php": ">=8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MbWrapper\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "BSD-3-Clause" ], "authors": [ { - "name": "Zaahid Bateson" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", - "keywords": [ - "charset", - "encoding", - "http", - "iconv", - "mail", - "mb", - "mb_convert_encoding", - "mbstring", - "mime", - "multibyte", - "string" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { - "url": "https://github.com/zbateson", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2023-01-11T23:05:44+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { - "name": "zbateson/stream-decorators", - "version": "1.2.0", + "name": "sebastian/code-unit", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "712b9e7d25dc665a6c64bdba65929bbb6f0932aa" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/712b9e7d25dc665a6c64bdba65929bbb6f0932aa", - "reference": "712b9e7d25dc665a6c64bdba65929bbb6f0932aa", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.2", - "zbateson/mb-wrapper": "^1.0.0" + "php": ">=8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\StreamDecorators\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "BSD-3-Clause" ], "authors": [ { - "name": "Zaahid Bateson" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "PHP psr7 stream decorators for mime message part streams", - "keywords": [ - "base64", - "charset", - "decorators", - "mail", - "mime", - "psr7", - "quoted-printable", - "stream", - "uuencode" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.2.0" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { - "url": "https://github.com/zbateson", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2023-04-19T16:56:59+00:00" - } - ], - "packages-dev": [ + "time": "2023-02-03T06:58:43+00:00" + }, { - "name": "brianium/paratest", - "version": "v6.4.4", + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "589cdb23728b2a19872945580b95d8aa2c6619da" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/589cdb23728b2a19872945580b95d8aa2c6619da", - "reference": "589cdb23728b2a19872945580b95d8aa2c6619da", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.11", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.14", - "sebastian/environment": "^5.1.3", - "symfony/console": "^5.4.0 || ^6.0.0", - "symfony/process": "^5.4.0 || ^6.0.0" + "php": ">=8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0.0", - "ext-posix": "*", - "infection/infection": "^0.26.5", - "malukenho/mcbumpface": "^1.1.5", - "squizlabs/php_codesniffer": "^3.6.2", - "symfony/filesystem": "^v5.4.0 || ^6.0.0", - "vimeo/psalm": "^4.20.0" + "phpunit/phpunit": "^10.0" }, - "bin": [ - "bin/paratest" - ], "type": "library", - "autoload": { - "psr-4": { - "ParaTest\\": [ - "src/" - ] + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" - }, - { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", - "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], + "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/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.4.4" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { - "url": "https://github.com/sponsors/Slamdunk", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" } ], - "time": "2022-03-28T07:55:11+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { - "name": "filp/whoops", - "version": "2.15.2", + "name": "sebastian/comparator", + "version": "5.0.1", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/aac9304c5ed61bf7b1b7a6064bf9806ab842ce73", - "reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-main": "5.0-dev" } }, "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "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": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.2" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { - "url": "https://github.com/denis-sokolov", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2023-04-12T12:00:00+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { - "name": "laravel/dusk", - "version": "v6.25.2", + "name": "sebastian/complexity", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/laravel/dusk.git", - "reference": "25a595ac3dc82089a91af10dd23b0d58fd3f6d0b" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/25a595ac3dc82089a91af10dd23b0d58fd3f6d0b", - "reference": "25a595ac3dc82089a91af10dd23b0d58fd3f6d0b", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "ext-json": "*", - "ext-zip": "*", - "illuminate/console": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", - "nesbot/carbon": "^2.0", - "php": "^7.2|^8.0", - "php-webdriver/webdriver": "^1.9.0", - "symfony/console": "^4.3|^5.0|^6.0", - "symfony/finder": "^4.3|^5.0|^6.0", - "symfony/process": "^4.3|^5.0|^6.0", - "vlucas/phpdotenv": "^3.0|^4.0|^5.2" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.16|^5.17.1|^6.12.1|^7.0", - "phpunit/phpunit": "^7.5.15|^8.4|^9.0" - }, - "suggest": { - "ext-pcntl": "Used to gracefully terminate Dusk when tests are running." + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Dusk\\DuskServiceProvider" - ] + "dev-main": "3.2-dev" } }, "autoload": { - "psr-4": { - "Laravel\\Dusk\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Laravel Dusk provides simple end-to-end testing and browser automation.", - "keywords": [ - "laravel", - "testing", - "webdriver" - ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", "support": { - "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v6.25.2" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, - "time": "2022-09-29T09:37:07+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" }, { - "name": "laravel/pint", - "version": "v1.5.0", + "name": "sebastian/diff", + "version": "5.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "e0a8cef58b74662f27355be9cdea0e726bbac362" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/e0a8cef58b74662f27355be9cdea0e726bbac362", - "reference": "e0a8cef58b74662f27355be9cdea0e726bbac362", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.0" + "php": ">=8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.14.4", - "illuminate/view": "^9.51.0", - "laravel-zero/framework": "^9.2.0", - "mockery/mockery": "^1.5.1", - "nunomaduro/larastan": "^2.4.0", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^1.22.4" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, - "bin": [ - "builds/pint" - ], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "format", - "formatter", - "lint", - "linter", - "php" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, - "time": "2023-02-14T16:31:02+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" }, { - "name": "laravel/sail", - "version": "v1.21.5", + "name": "sebastian/environment", + "version": "6.0.1", "source": { "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "27af207bb1c53faddcba34c7528b3e969f6a646d" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/27af207bb1c53faddcba34c7528b3e969f6a646d", - "reference": "27af207bb1c53faddcba34c7528b3e969f6a646d", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", "shasum": "" }, "require": { - "illuminate/console": "^8.0|^9.0|^10.0", - "illuminate/contracts": "^8.0|^9.0|^10.0", - "illuminate/support": "^8.0|^9.0|^10.0", - "php": "^7.3|^8.0", - "symfony/yaml": "^6.0" + "php": ">=8.1" }, "require-dev": { - "orchestra/testbench": "^6.0|^7.0|^8.0", - "phpstan/phpstan": "^1.10" + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" }, - "bin": [ - "bin/sail" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] + "dev-main": "6.0-dev" } }, "autoload": { - "psr-4": { - "Laravel\\Sail\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Docker files for running a basic Laravel application.", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ - "docker", - "laravel" + "Xdebug", + "environment", + "hhvm" ], "support": { - "issues": "https://github.com/laravel/sail/issues", - "source": "https://github.com/laravel/sail" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" }, - "time": "2023-04-24T13:29:38+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-11T05:39:26+00:00" }, { - "name": "nunomaduro/collision", - "version": "v6.4.0", + "name": "sebastian/exporter", + "version": "5.1.2", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "f05978827b9343cba381ca05b8c7deee346b6015" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", - "reference": "f05978827b9343cba381ca05b8c7deee346b6015", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "filp/whoops": "^2.14.5", - "php": "^8.0.0", - "symfony/console": "^6.0.2" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "brianium/paratest": "^6.4.1", - "laravel/framework": "^9.26.1", - "laravel/pint": "^1.1.1", - "nunomaduro/larastan": "^1.0.3", - "nunomaduro/mock-final-classes": "^1.1.0", - "orchestra/testbench": "^7.7", - "phpunit/phpunit": "^9.5.23", - "spatie/ignition": "^1.4.1" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-develop": "6.x-dev" - }, - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] + "dev-main": "5.1-dev" } }, "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "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": "Cli error handling for console/command-line PHP applications.", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" + "export", + "exporter" ], "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2023-01-03T12:54:54+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { - "name": "nunomaduro/larastan", - "version": "v2.6.0", + "name": "sebastian/global-state", + "version": "6.0.2", "source": { "type": "git", - "url": "https://github.com/nunomaduro/larastan.git", - "reference": "ccac5b25949576807862cf32ba1fce1769c06c42" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/ccac5b25949576807862cf32ba1fce1769c06c42", - "reference": "ccac5b25949576807862cf32ba1fce1769c06c42", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "ext-json": "*", - "illuminate/console": "^9.47.0 || ^10.0.0", - "illuminate/container": "^9.47.0 || ^10.0.0", - "illuminate/contracts": "^9.47.0 || ^10.0.0", - "illuminate/database": "^9.47.0 || ^10.0.0", - "illuminate/http": "^9.47.0 || ^10.0.0", - "illuminate/pipeline": "^9.47.0 || ^10.0.0", - "illuminate/support": "^9.47.0 || ^10.0.0", - "php": "^8.0.2", - "phpmyadmin/sql-parser": "^5.6.0", - "phpstan/phpstan": "~1.10.6" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "nikic/php-parser": "^4.15.2", - "orchestra/testbench": "^7.19.0 || ^8.0.0", - "phpunit/phpunit": "^9.5.27" - }, - "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + "ext-dom": "*", + "phpunit/phpunit": "^10.0" }, - "type": "phpstan-extension", + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] + "dev-main": "6.0-dev" } }, "autoload": { - "psr-4": { - "NunoMaduro\\Larastan\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ - "PHPStan", - "code analyse", - "code analysis", - "larastan", - "laravel", - "package", - "php", - "static analysis" + "global state" ], "support": { - "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/v2.6.0" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/canvural", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2023-04-20T12:40:01+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { - "name": "pestphp/pest", - "version": "v1.23.0", + "name": "sebastian/lines-of-code", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "061c9de301531e500a8157b476a5899361e60068" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/061c9de301531e500a8157b476a5899361e60068", - "reference": "061c9de301531e500a8157b476a5899361e60068", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nunomaduro/collision": "^5.11.0|^6.4.0", - "pestphp/pest-plugin": "^1.1.0", - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^9.6.7" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "illuminate/console": "^8.83.27", - "illuminate/support": "^8.83.27", - "laravel/dusk": "^6.25.2", - "pestphp/pest-dev-tools": "^1.0.0", - "pestphp/pest-plugin-parallel": "^1.2.1" + "phpunit/phpunit": "^10.0" }, - "bin": [ - "bin/pest" - ], "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "pest": { - "plugins": [ - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Environment" - ] - }, - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] + "dev-main": "2.0-dev" } }, "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "An elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], + "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/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2023-04-19T20:10:22+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { - "name": "pestphp/pest-plugin", - "version": "v1.1.0", + "name": "sebastian/object-enumerator", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "606c5f79c6a339b49838ffbee0151ca519efe378" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/606c5f79c6a339b49838ffbee0151ca519efe378", - "reference": "606c5f79c6a339b49838ffbee0151ca519efe378", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "pestphp/pest": "<1.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "composer/composer": "^2.4.2", - "pestphp/pest": "^1.22.1", - "pestphp/pest-dev-tools": "^1.0.0" + "phpunit/phpunit": "^10.0" }, - "type": "composer-plugin", + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" - }, - "class": "Pest\\Plugin\\Manager" + "dev-main": "5.0-dev" + } }, "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "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": { - "source": "https://github.com/pestphp/pest-plugin/tree/v1.1.0" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2022-09-18T13:18:17+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { - "name": "pestphp/pest-plugin-laravel", - "version": "v1.4.0", + "name": "sebastian/object-reflector", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "61935be0deae1732a3ead780fbd9277aa93e2f6d" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/61935be0deae1732a3ead780fbd9277aa93e2f6d", - "reference": "61935be0deae1732a3ead780fbd9277aa93e2f6d", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "laravel/framework": "^7.30.6 || ^8.83.27 || ^9.47.0 || ^10.0.0", - "pestphp/pest": "^1.22.1", - "php": "^7.3 || ^8.0" + "php": ">=8.1" }, "require-dev": { - "orchestra/testbench": "^5.20.0 || ^6.25.0 || ^7.7.0 || ^8.0", - "pestphp/pest-dev-tools": "^1.0.0" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Laravel\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "The Pest Laravel Plugin", - "keywords": [ - "framework", - "laravel", - "pest", - "php", - "test", - "testing", - "unit" + "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": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v1.4.0" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2023-01-13T16:54:07+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { - "name": "pestphp/pest-plugin-livewire", - "version": "v1.0.0", + "name": "sebastian/recursion-context", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-livewire.git", - "reference": "30e259e57c18dd40402e7fd29d46344a6cb9ff03" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/30e259e57c18dd40402e7fd29d46344a6cb9ff03", - "reference": "30e259e57c18dd40402e7fd29d46344a6cb9ff03", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "livewire/livewire": "^1.2|^2.0", - "pestphp/pest": "^1.0", - "php": "^7.3|^8.0" + "php": ">=8.1" }, "require-dev": { - "orchestra/testbench": "^6.4", - "pestphp/pest-dev-tools": "dev-master" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "5.0-dev" } }, "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Livewire\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "The Pest Livewire Plugin", - "keywords": [ - "framework", - "livewire", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "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": { - "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v1.0.0" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2021-01-03T15:37:46+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { - "name": "php-webdriver/webdriver", - "version": "1.14.0", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/php-webdriver/php-webdriver.git", - "reference": "3ea4f924afb43056bf9c630509e657d951608563" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/3ea4f924afb43056bf9c630509e657d951608563", - "reference": "3ea4f924afb43056bf9c630509e657d951608563", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-zip": "*", - "php": "^7.3 || ^8.0", - "symfony/polyfill-mbstring": "^1.12", - "symfony/process": "^5.0 || ^6.0" - }, - "replace": { - "facebook/webdriver": "*" + "php": ">=8.1" }, "require-dev": { - "ergebnis/composer-normalize": "^2.20.0", - "ondram/ci-detector": "^4.0", - "php-coveralls/php-coveralls": "^2.4", - "php-mock/php-mock-phpunit": "^2.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "^3.5", - "symfony/var-dumper": "^5.0 || ^6.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "files": [ - "lib/Exception/TimeoutException.php" - ], - "psr-4": { - "Facebook\\WebDriver\\": "lib/" + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.", - "homepage": "https://github.com/php-webdriver/php-webdriver", - "keywords": [ - "Chromedriver", - "geckodriver", - "php", - "selenium", - "webdriver" + "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/php-webdriver/php-webdriver/issues", - "source": "https://github.com/php-webdriver/php-webdriver/tree/1.14.0" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, - "time": "2023-02-09T12:12:19+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "phpmyadmin/sql-parser", - "version": "5.7.0", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "0f5895aab2b6002d00b6831b60983523dea30bff" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/0f5895aab2b6002d00b6831b60983523dea30bff", - "reference": "0f5895aab2b6002d00b6831b60983523dea30bff", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpmyadmin/motranslator": "<3.0" - }, - "require-dev": { - "phpbench/phpbench": "^1.1", - "phpmyadmin/coding-standard": "^3.0", - "phpmyadmin/motranslator": "^4.0 || ^5.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.9.12", - "phpstan/phpstan-phpunit": "^1.3.3", - "phpunit/php-code-coverage": "*", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.11", - "zumba/json-serializer": "^3.0" + "php": ">=8.1" }, - "suggest": { - "ext-mbstring": "For best performance", - "phpmyadmin/motranslator": "Translate messages to your favorite locale" - }, - "bin": [ - "bin/highlight-query", - "bin/lint-query", - "bin/tokenize-query" - ], "type": "library", - "autoload": { - "psr-4": { - "PhpMyAdmin\\SqlParser\\": "src" + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-2.0-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "The phpMyAdmin Team", - "email": "developers@phpmyadmin.net", - "homepage": "https://www.phpmyadmin.net/team/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", - "homepage": "https://github.com/phpmyadmin/sql-parser", - "keywords": [ - "analysis", - "lexer", - "parser", - "query linter", - "sql", - "sql lexer", - "sql linter", - "sql parser", - "sql syntax highlighter", - "sql tokenizer" - ], + "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/phpmyadmin/sql-parser/issues", - "source": "https://github.com/phpmyadmin/sql-parser" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { - "url": "https://www.phpmyadmin.net/donate/", - "type": "other" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2023-01-25T10:43:40+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "phpstan/phpstan", - "version": "1.10.14", + "name": "spatie/backtrace", + "version": "1.5.3", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "d232901b09e67538e5c86a724be841bea5768a7c" + "url": "https://github.com/spatie/backtrace.git", + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d232901b09e67538e5c86a724be841bea5768a7c", - "reference": "d232901b09e67538e5c86a724be841bea5768a7c", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab", + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^7.3|^8.0" }, - "conflict": { - "phpstan/phpstan-shim": "*" + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" }, - "bin": [ - "phpstan", - "phpstan.phar" - ], "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ] + "psr-4": { + "Spatie\\Backtrace\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PHPStan - PHP Static Analysis Tool", + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", "keywords": [ - "dev", - "static analysis" + "Backtrace", + "spatie" ], "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" + "source": "https://github.com/spatie/backtrace/tree/1.5.3" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", + "url": "https://github.com/sponsors/spatie", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" + "url": "https://spatie.be/open-source/support-us", + "type": "other" } ], - "time": "2023-04-19T13:47:27+00:00" + "time": "2023-06-28T12:59:17+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.3.6", + "version": "1.4.4", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "530ac81255af79f114344286e4275f8869c671e2" + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/530ac81255af79f114344286e4275f8869c671e2", - "reference": "530ac81255af79f114344286e4275f8869c671e2", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c", + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", "php": "^8.0", - "spatie/backtrace": "^1.2", - "symfony/http-foundation": "^5.0|^6.0", - "symfony/mime": "^5.2|^6.0", - "symfony/process": "^5.2|^6.0", - "symfony/var-dumper": "^5.2|^6.0" + "spatie/backtrace": "^1.5.2", + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" }, "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.3.0", - "pestphp/pest": "^1.20", + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0" + "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.1.x-dev" + "dev-main": "1.3.x-dev" } }, "autoload": { @@ -11577,7 +8614,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.3.6" + "source": "https://github.com/spatie/flare-client-php/tree/1.4.4" }, "funding": [ { @@ -11585,41 +8622,41 @@ "type": "github" } ], - "time": "2023-04-12T07:57:12+00:00" + "time": "2024-01-31T14:18:45+00:00" }, { "name": "spatie/ignition", - "version": "1.7.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "f747d83c6d7cb6229b462f3ddbb3a82dc0db0f78" + "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/f747d83c6d7cb6229b462f3ddbb3a82dc0db0f78", - "reference": "f747d83c6d7cb6229b462f3ddbb3a82dc0db0f78", + "url": "https://api.github.com/repos/spatie/ignition/zipball/5b6f801c605a593106b623e45ca41496a6e7d56d", + "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "php": "^8.0", - "spatie/backtrace": "^1.4", - "spatie/flare-client-php": "^1.1", - "symfony/console": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "spatie/backtrace": "^1.5.3", + "spatie/flare-client-php": "^1.4.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52", + "illuminate/cache": "^9.52|^10.0|^11.0", "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20", + "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "psr/simple-cache-implementation": "*", - "symfony/cache": "^6.2", - "symfony/process": "^5.4|^6.0", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -11668,45 +8705,47 @@ "type": "github" } ], - "time": "2023-05-04T13:20:26+00:00" + "time": "2024-01-03T15:49:39+00:00" }, { "name": "spatie/laravel-ignition", - "version": "1.6.4", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc" + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", - "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/351504f4570e32908839fc5a2dc53bf77d02f85e", + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^8.77|^9.27", - "monolog/monolog": "^2.3", - "php": "^8.0", - "spatie/flare-client-php": "^1.0.1", - "spatie/ignition": "^1.4.1", - "symfony/console": "^5.0|^6.0", - "symfony/var-dumper": "^5.0|^6.0" + "illuminate/support": "^10.0|^11.0", + "php": "^8.1", + "spatie/flare-client-php": "^1.3.5", + "spatie/ignition": "^1.9", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" }, "require-dev": { - "filp/whoops": "^2.14", - "livewire/livewire": "^2.8|dev-develop", - "mockery/mockery": "^1.4", - "nunomaduro/larastan": "^1.0", - "orchestra/testbench": "^6.23|^7.0", - "pestphp/pest": "^1.20", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/laravel-ray": "^1.27" + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.30", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.3", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" }, "type": "library", "extra": { @@ -11758,21 +8797,197 @@ "type": "github" } ], - "time": "2023-01-03T19:28:04+00:00" + "time": "2024-02-09T16:08:40+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "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/v7.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T15:02:46+00:00" + }, + { + "name": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.4", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" + }, + "time": "2024-01-05T14:10:56+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], - "minimum-stability": "dev", + "minimum-stability": "stable", "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.0.2|^8.1|^8.2", - "ext-json": "*" + "php": "^8.2" }, "platform-dev": [], - "platform-overrides": { - "php": "8.0.2" - }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/config/app.php b/config/app.php index 02531fa..f467267 100644 --- a/config/app.php +++ b/config/app.php @@ -1,20 +1,19 @@ env('APP_NAME', 'Laravel'), - 'name' => 'Ghygen', - 'force_https' => env('APP_FORCE_HTTPS', false), + 'name' => env('APP_NAME', 'Laravel'), /* |-------------------------------------------------------------------------- @@ -49,26 +48,24 @@ | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of - | your application so that it is used when running Artisan tasks. + | the application so that it's available within Artisan commands. | */ 'url' => env('APP_URL', 'http://localhost'), - 'asset_url' => env('ASSET_URL', null), - /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. | */ - 'timezone' => 'UTC', + 'timezone' => env('APP_TIMEZONE', 'UTC'), /* |-------------------------------------------------------------------------- @@ -76,154 +73,54 @@ |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. | */ - 'locale' => 'en', + 'locale' => env('APP_LOCALE', 'en'), - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Faker Locale - |-------------------------------------------------------------------------- - | - | This locale will be used by the Faker PHP library when generating fake - | data for your database seeds. For example, this will be used to get - | localized telephone numbers, street address information and more. - | - */ - - 'faker_locale' => 'en_US', + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. | */ - 'key' => env('APP_KEY'), - 'cipher' => 'AES-256-CBC', - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ + 'key' => env('APP_KEY'), - 'providers' => [ - /* - * Laravel Framework Service Providers... - */ - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, - Illuminate\Translation\TranslationServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, - - /* - * Package Service Providers... - */ - - /* - * Application Service Providers... - */ - App\Providers\AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - // App\Providers\BroadcastServiceProvider::class, - App\Providers\EventServiceProvider::class, - App\Providers\RouteServiceProvider::class, - App\Providers\ViewServiceProvider::class, + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), ], /* |-------------------------------------------------------------------------- - | Class Aliases + | Maintenance Mode Driver |-------------------------------------------------------------------------- | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" | */ - 'aliases' => [ - 'App' => Illuminate\Support\Facades\App::class, - 'Arr' => Illuminate\Support\Arr::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'DB' => Illuminate\Support\Facades\DB::class, - 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'Event' => Illuminate\Support\Facades\Event::class, - 'File' => Illuminate\Support\Facades\File::class, - 'Gate' => Illuminate\Support\Facades\Gate::class, - 'Hash' => Illuminate\Support\Facades\Hash::class, - 'Http' => Illuminate\Support\Facades\Http::class, - 'Lang' => Illuminate\Support\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Notification' => Illuminate\Support\Facades\Notification::class, - 'Password' => Illuminate\Support\Facades\Password::class, - 'Queue' => Illuminate\Support\Facades\Queue::class, - 'Redirect' => Illuminate\Support\Facades\Redirect::class, - // 'Redis' => Illuminate\Support\Facades\Redis::class, - 'Request' => Illuminate\Support\Facades\Request::class, - 'Response' => Illuminate\Support\Facades\Response::class, - 'Route' => Illuminate\Support\Facades\Route::class, - 'Schema' => Illuminate\Support\Facades\Schema::class, - 'Session' => Illuminate\Support\Facades\Session::class, - 'Storage' => Illuminate\Support\Facades\Storage::class, - 'Str' => Illuminate\Support\Str::class, - 'URL' => Illuminate\Support\Facades\URL::class, - 'Validator' => Illuminate\Support\Facades\Validator::class, - 'View' => Illuminate\Support\Facades\View::class, + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), ], + ]; diff --git a/config/auth.php b/config/auth.php index ba1a4d8..0ba5d5d 100644 --- a/config/auth.php +++ b/config/auth.php @@ -7,15 +7,15 @@ | Authentication Defaults |-------------------------------------------------------------------------- | - | This option controls the default authentication "guard" and password - | reset options for your application. You may change these defaults + | This option defines the default authentication "guard" and password + | reset "broker" for your application. You may change these values | as required, but they're a perfect start for most applications. | */ 'defaults' => [ - 'guard' => 'web', - 'passwords' => 'users', + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), ], /* @@ -25,13 +25,13 @@ | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you - | here which uses session storage and the Eloquent user provider. + | which utilizes session storage plus the Eloquent user provider. | - | All authentication drivers have a user provider. This defines how the + | All authentication guards have a user provider, which defines how the | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. + | system used by the application. Typically, Eloquent is utilized. | - | Supported: "session", "token" + | Supported: "session" | */ @@ -40,12 +40,6 @@ 'driver' => 'session', 'provider' => 'users', ], - - 'api' => [ - 'driver' => 'token', - 'provider' => 'users', - 'hash' => false, - ], ], /* @@ -53,12 +47,12 @@ | User Providers |-------------------------------------------------------------------------- | - | All authentication drivers have a user provider. This defines how the + | All authentication guards have a user provider, which defines how the | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. + | system used by the application. Typically, Eloquent is utilized. | | If you have multiple user tables or models you may configure multiple - | sources which represent each model / table. These sources may then + | providers to represent the model / table. These providers may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" @@ -68,7 +62,7 @@ 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => App\Models\User::class, + 'model' => env('AUTH_MODEL', App\Models\User::class), ], // 'users' => [ @@ -82,20 +76,24 @@ | Resetting Passwords |-------------------------------------------------------------------------- | - | You may specify multiple password reset configurations if you have more - | than one user table or model in the application and you want to have - | separate password reset settings based on the specific user types. + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. | - | The expire time is the number of minutes that the reset token should be + | The expiry time is the number of minutes that each reset token will be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | */ 'passwords' => [ 'users' => [ 'provider' => 'users', - 'table' => 'password_resets', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 'expire' => 60, 'throttle' => 60, ], @@ -107,11 +105,11 @@ |-------------------------------------------------------------------------- | | Here you may define the amount of seconds before a password confirmation - | times out and the user is prompted to re-enter their password via the + | window expires and users are asked to re-enter their password via the | confirmation screen. By default, the timeout lasts for three hours. | */ - 'password_timeout' => 10800, + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), ]; diff --git a/config/broadcasting.php b/config/broadcasting.php deleted file mode 100644 index ef20859..0000000 --- a/config/broadcasting.php +++ /dev/null @@ -1,64 +0,0 @@ - env('BROADCAST_DRIVER', 'null'), - - /* - |-------------------------------------------------------------------------- - | Broadcast Connections - |-------------------------------------------------------------------------- - | - | Here you may define all of the broadcast connections that will be used - | to broadcast events to other systems or over websockets. Samples of - | each available type of connection are provided inside this array. - | - */ - - 'connections' => [ - - 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'useTLS' => true, - ], - ], - - 'ably' => [ - 'driver' => 'ably', - 'key' => env('ABLY_KEY'), - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - 'log' => [ - 'driver' => 'log', - ], - - 'null' => [ - 'driver' => 'null', - ], - - ], - -]; diff --git a/config/cache.php b/config/cache.php index e32a2fd..3eb95d1 100644 --- a/config/cache.php +++ b/config/cache.php @@ -9,13 +9,13 @@ | Default Cache Store |-------------------------------------------------------------------------- | - | This option controls the default cache connection that gets used while - | using this caching library. This connection is used when another is - | not explicitly specified when executing a given caching function. + | This option controls the default cache store that will be used by the + | framework. This connection is utilized if another isn't explicitly + | specified when running a cache operation inside the application. | */ - 'default' => env('CACHE_DRIVER', 'file'), + 'default' => env('CACHE_STORE', 'database'), /* |-------------------------------------------------------------------------- @@ -26,17 +26,13 @@ | well as their drivers. You may even define multiple stores for the | same cache driver to group types of items stored in your caches. | - | Supported drivers: "apc", "array", "database", "file", - | "memcached", "redis", "dynamodb", "null" + | Supported drivers: "apc", "array", "database", "file", "memcached", + | "redis", "dynamodb", "octane", "null" | */ 'stores' => [ - 'apc' => [ - 'driver' => 'apc', - ], - 'array' => [ 'driver' => 'array', 'serialize' => false, @@ -44,14 +40,15 @@ 'database' => [ 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - 'lock_connection' => null, + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'connection' => env('DB_CACHE_CONNECTION', null), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION', null), ], 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), ], 'memcached' => [ @@ -75,8 +72,8 @@ 'redis' => [ 'driver' => 'redis', - 'connection' => 'cache', - 'lock_connection' => 'default', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), ], 'dynamodb' => [ @@ -88,6 +85,10 @@ 'endpoint' => env('DYNAMODB_ENDPOINT'), ], + 'octane' => [ + 'driver' => 'octane', + ], + ], /* @@ -95,12 +96,12 @@ | Cache Key Prefix |-------------------------------------------------------------------------- | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. | */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), ]; diff --git a/config/cors.php b/config/cors.php deleted file mode 100644 index 8a39e6d..0000000 --- a/config/cors.php +++ /dev/null @@ -1,34 +0,0 @@ - ['api/*', 'sanctum/csrf-cookie'], - - 'allowed_methods' => ['*'], - - 'allowed_origins' => ['*'], - - 'allowed_origins_patterns' => [], - - 'allowed_headers' => ['*'], - - 'exposed_headers' => [], - - 'max_age' => 0, - - 'supports_credentials' => false, - -]; diff --git a/config/database.php b/config/database.php index b42d9b3..f720f56 100644 --- a/config/database.php +++ b/config/database.php @@ -10,26 +10,22 @@ |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. + | to use as your default connection for database operations. This is + | the connection which will be utilized unless another connection + | is explicitly specified when you execute a query / statement. | */ - 'default' => env('DB_CONNECTION', 'mysql'), + 'default' => env('DB_CONNECTION', 'sqlite'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. | */ @@ -37,7 +33,7 @@ 'sqlite' => [ 'driver' => 'sqlite', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), @@ -45,15 +41,35 @@ 'mysql' => [ 'driver' => 'mysql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_0900_ai_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, @@ -65,30 +81,32 @@ 'pgsql' => [ 'driver' => 'pgsql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, - 'schema' => 'public', + 'search_path' => 'public', 'sslmode' => 'prefer', ], 'sqlsrv' => [ 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), ], ], @@ -100,11 +118,14 @@ | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. + | the migrations on disk haven't actually been run on the database. | */ - 'migrations' => 'migrations', + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], /* |-------------------------------------------------------------------------- @@ -113,7 +134,7 @@ | | Redis is an open source, fast, and advanced key-value store that also | provides a richer body of commands than a typical key-value system - | such as APC or Memcached. Laravel makes it easy to dig right in. + | such as Memcached. You may define your connection settings here. | */ @@ -129,7 +150,8 @@ 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), ], @@ -137,7 +159,8 @@ 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), ], diff --git a/config/filesystems.php b/config/filesystems.php index 10c9d9b..44fe9c8 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -9,20 +9,20 @@ | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud - | based disks are available to your application. Just store away! + | based disks are available to your application for file storage. | */ - 'default' => env('FILESYSTEM_DRIVER', 'local'), + 'default' => env('FILESYSTEM_DISK', 'local'), /* |-------------------------------------------------------------------------- | Filesystem Disks |-------------------------------------------------------------------------- | - | Here you may configure as many filesystem "disks" as you wish, and you - | may even configure multiple disks of the same driver. Defaults have - | been setup for each driver as an example of the required options. + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. | | Supported Drivers: "local", "ftp", "sftp", "s3" | @@ -33,6 +33,7 @@ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'throw' => false, ], 'public' => [ @@ -40,6 +41,7 @@ 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', + 'throw' => false, ], 's3' => [ @@ -50,6 +52,8 @@ 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, ], ], diff --git a/config/gh-action-yaml-generator.php b/config/gh-action-yaml-generator.php deleted file mode 100644 index 9ce68e2..0000000 --- a/config/gh-action-yaml-generator.php +++ /dev/null @@ -1,9 +0,0 @@ - [ - 'title' => 'Ghygen is a GitHub Actions configurator for your Laravel Application.', - 'title_about' => 'Generate GitHub Actions Config for Laravel Projects with Ghygen', - 'description' => 'Setup Database Service, use multiple PHP version, use multiple Laravel versions, build frontend, cache packages, execute Browser, Functional, and Unit tests…', - ], -]; diff --git a/config/hashing.php b/config/hashing.php deleted file mode 100644 index 8425770..0000000 --- a/config/hashing.php +++ /dev/null @@ -1,52 +0,0 @@ - 'bcrypt', - - /* - |-------------------------------------------------------------------------- - | Bcrypt Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Bcrypt algorithm. This will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), - ], - - /* - |-------------------------------------------------------------------------- - | Argon Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Argon algorithm. These will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, - ], - -]; diff --git a/config/logging.php b/config/logging.php index 6aa77fe..d526b64 100644 --- a/config/logging.php +++ b/config/logging.php @@ -3,6 +3,7 @@ use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; +use Monolog\Processor\PsrLogMessageProcessor; return [ @@ -11,33 +12,49 @@ | Default Log Channel |-------------------------------------------------------------------------- | - | This option defines the default log channel that gets used when writing - | messages to the logs. The name specified in this option should match - | one of the channels defined in the "channels" configuration array. + | This option defines the default log channel that is utilized to write + | messages to your logs. The value provided here should match one of + | the channels present in the list of "channels" configured below. | */ 'default' => env('LOG_CHANNEL', 'stack'), + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + /* |-------------------------------------------------------------------------- | Log Channels |-------------------------------------------------------------------------- | - | Here you may configure the log channels for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. | | Available Drivers: "single", "daily", "slack", "syslog", - | "errorlog", "monolog", - | "custom", "stack" + | "errorlog", "monolog", "custom", "stack" | */ 'channels' => [ + 'stack' => [ 'driver' => 'stack', - 'channels' => ['single'], + 'channels' => explode(',', env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], @@ -45,50 +62,60 @@ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), - 'days' => 14, + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, ], 'papertrail' => [ 'driver' => 'monolog', 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => SyslogUdpHandler::class, + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), ], + 'processors' => [PsrLogMessageProcessor::class], ], 'stderr' => [ 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), 'handler' => StreamHandler::class, 'formatter' => env('LOG_STDERR_FORMATTER'), 'with' => [ 'stream' => 'php://stderr', ], + 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ 'driver' => 'syslog', 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], 'null' => [ @@ -99,6 +126,7 @@ 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], + ], ]; diff --git a/config/mail.php b/config/mail.php index 54299aa..a4a02fe 100644 --- a/config/mail.php +++ b/config/mail.php @@ -7,13 +7,14 @@ | Default Mailer |-------------------------------------------------------------------------- | - | This option controls the default mailer that is used to send any email - | messages sent by your application. Alternative mailers may be setup - | and used as needed; however, this mailer will be used by default. + | This option controls the default mailer that is used to send all email + | messages unless another mailer is explicitly specified when sending + | the message. All additional mailers can be configured within the + | "mailers" array. Examples of each type of mailer are provided. | */ - 'default' => env('MAIL_MAILER', 'smtp'), + 'default' => env('MAIL_MAILER', 'log'), /* |-------------------------------------------------------------------------- @@ -24,42 +25,44 @@ | their respective settings. Several examples have been configured for | you and you are free to add your own as your application requires. | - | Laravel supports a variety of mail "transport" drivers to be used while - | sending an e-mail. You will specify which one you are using for your - | mailers below. You are free to add additional mailers as required. + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. | - | Supported: "smtp", "sendmail", "mailgun", "ses", - | "postmark", "log", "array" + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "log", "array", "failover", "roundrobin" | */ 'mailers' => [ + 'smtp' => [ 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'auth_mode' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), ], 'ses' => [ 'transport' => 'ses', ], - 'mailgun' => [ - 'transport' => 'mailgun', - ], - 'postmark' => [ 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], ], 'sendmail' => [ 'transport' => 'sendmail', - 'path' => '/usr/sbin/sendmail -bs', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), ], 'log' => [ @@ -70,6 +73,15 @@ 'array' => [ 'transport' => 'array', ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], /* @@ -77,9 +89,9 @@ | Global "From" Address |-------------------------------------------------------------------------- | - | You may wish for all e-mails sent by your application to be sent from - | the same address. Here, you may specify a name and address that is - | used globally for all e-mails that are sent by your application. + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. | */ @@ -88,23 +100,4 @@ 'name' => env('MAIL_FROM_NAME', 'Example'), ], - /* - |-------------------------------------------------------------------------- - | Markdown Mail Settings - |-------------------------------------------------------------------------- - | - | If you are using Markdown based email rendering, you may configure your - | theme and component paths here, allowing you to customize the design - | of the emails. Or, you may simply stick with the Laravel defaults! - | - */ - - 'markdown' => [ - 'theme' => 'default', - - 'paths' => [ - resource_path('views/vendor/mail'), - ], - ], - ]; diff --git a/config/queue.php b/config/queue.php index 1222296..4f689e9 100644 --- a/config/queue.php +++ b/config/queue.php @@ -7,22 +7,22 @@ | Default Queue Connection Name |-------------------------------------------------------------------------- | - | Laravel's queue API supports an assortment of back-ends via a single - | API, giving you convenient access to each back-end using the same - | syntax for every one. Here you may define a default connection. + | Laravel's queue supports a variety of backends via a single, unified + | API, giving you convenient access to each backend using identical + | syntax for each. The default queue connection is defined below. | */ - 'default' => env('QUEUE_CONNECTION', 'sync'), + 'default' => env('QUEUE_CONNECTION', 'database'), /* |-------------------------------------------------------------------------- | Queue Connections |-------------------------------------------------------------------------- | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" | @@ -36,17 +36,20 @@ 'database' => [ 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, + 'connection' => env('DB_QUEUE_CONNECTION', null), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 'block_for' => 0, + 'after_commit' => false, ], 'sqs' => [ @@ -54,35 +57,55 @@ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), - 'queue' => env('SQS_QUEUE', 'your-queue-name'), + 'queue' => env('SQS_QUEUE', 'default'), 'suffix' => env('SQS_SUFFIX'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, ], 'redis' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => 90, + 'retry_after' => env('REDIS_QUEUE_RETRY_AFTER', 90), 'block_for' => null, + 'after_commit' => false, ], ], + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + /* |-------------------------------------------------------------------------- | Failed Queue Jobs |-------------------------------------------------------------------------- | | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" | */ 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), - 'database' => env('DB_CONNECTION', 'mysql'), + 'database' => env('DB_CONNECTION', 'sqlite'), 'table' => 'failed_jobs', ], diff --git a/config/services.php b/config/services.php index 2a1d616..6bb68f6 100644 --- a/config/services.php +++ b/config/services.php @@ -14,12 +14,6 @@ | */ - 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), - ], - 'postmark' => [ 'token' => env('POSTMARK_TOKEN'), ], @@ -30,4 +24,11 @@ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + ]; diff --git a/config/session.php b/config/session.php index 4e0f66c..0e22ee4 100644 --- a/config/session.php +++ b/config/session.php @@ -9,16 +9,16 @@ | Default Session Driver |-------------------------------------------------------------------------- | - | This option controls the default session "driver" that will be used on - | requests. By default, we will use the lightweight native driver but - | you may specify any of the other wonderful drivers provided here. + | This option determines the default session driver that is utilized for + | incoming requests. Laravel supports a variety of storage options to + | persist session data. Database storage is a great default choice. | | Supported: "file", "cookie", "database", "apc", | "memcached", "redis", "dynamodb", "array" | */ - 'driver' => env('SESSION_DRIVER', 'file'), + 'driver' => env('SESSION_DRIVER', 'database'), /* |-------------------------------------------------------------------------- @@ -27,13 +27,14 @@ | | Here you may specify the number of minutes that you wish the session | to be allowed to remain idle before it expires. If you want them - | to immediately expire on the browser closing, set that option. + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. | */ 'lifetime' => env('SESSION_LIFETIME', 120), - 'expire_on_close' => false, + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), /* |-------------------------------------------------------------------------- @@ -41,21 +42,21 @@ |-------------------------------------------------------------------------- | | This option allows you to easily specify that all of your session data - | should be encrypted before it is stored. All encryption will be run - | automatically by Laravel and you can use the Session like normal. + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. | */ - 'encrypt' => false, + 'encrypt' => env('SESSION_ENCRYPT', false), /* |-------------------------------------------------------------------------- | Session File Location |-------------------------------------------------------------------------- | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. | */ @@ -72,35 +73,35 @@ | */ - 'connection' => env('SESSION_CONNECTION', null), + 'connection' => env('SESSION_CONNECTION'), /* |-------------------------------------------------------------------------- | Session Database Table |-------------------------------------------------------------------------- | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. | */ - 'table' => 'sessions', + 'table' => env('SESSION_TABLE', 'sessions'), /* |-------------------------------------------------------------------------- | Session Cache Store |-------------------------------------------------------------------------- | - | While using one of the framework's cache driven session backends you may - | list a cache store that should be used for these sessions. This value - | must match with one of the application's configured cache "stores". + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. | | Affects: "apc", "dynamodb", "memcached", "redis" | */ - 'store' => env('SESSION_STORE', null), + 'store' => env('SESSION_STORE'), /* |-------------------------------------------------------------------------- @@ -120,9 +121,10 @@ | Session Cookie Name |-------------------------------------------------------------------------- | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | | */ @@ -138,24 +140,24 @@ | | The session cookie path determines the path for which the cookie will | be regarded as available. Typically, this will be the root path of - | your application but you are free to change this when necessary. + | your application, but you're free to change this when necessary. | */ - 'path' => '/', + 'path' => env('SESSION_PATH', '/'), /* |-------------------------------------------------------------------------- | Session Cookie Domain |-------------------------------------------------------------------------- | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain and all subdomains. Typically, this shouldn't be changed. | */ - 'domain' => env('SESSION_DOMAIN', null), + 'domain' => env('SESSION_DOMAIN'), /* |-------------------------------------------------------------------------- @@ -164,7 +166,7 @@ | | By setting this option to true, session cookies will only be sent back | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you if it can not be done securely. + | the cookie from being sent to you when it can't be done securely. | */ @@ -177,11 +179,11 @@ | | Setting this value to true will prevent JavaScript from accessing the | value of the cookie and the cookie will only be accessible through - | the HTTP protocol. You are free to modify this option if needed. + | the HTTP protocol. It's unlikely you should disable this option. | */ - 'http_only' => true, + 'http_only' => env('SESSION_HTTP_ONLY', true), /* |-------------------------------------------------------------------------- @@ -190,12 +192,27 @@ | | This option determines how your cookies behave when cross-site requests | take place, and can be used to mitigate CSRF attacks. By default, we - | will set this value to "lax" since this is a secure default value. + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value | | Supported: "lax", "strict", "none", null | */ - 'same_site' => 'lax', + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), ]; diff --git a/config/view.php b/config/view.php deleted file mode 100644 index 22b8a18..0000000 --- a/config/view.php +++ /dev/null @@ -1,36 +0,0 @@ - [ - resource_path('views'), - ], - - /* - |-------------------------------------------------------------------------- - | Compiled View Path - |-------------------------------------------------------------------------- - | - | This option determines where all the compiled Blade templates will be - | stored for your application. Typically, this is within the storage - | directory. However, as usual, you are free to change this value. - | - */ - - 'compiled' => env( - 'VIEW_COMPILED_PATH', - realpath(storage_path('framework/views')) - ), - -]; diff --git a/database/.gitignore b/database/.gitignore index 97fc976..9b19b93 100644 --- a/database/.gitignore +++ b/database/.gitignore @@ -1,2 +1 @@ -*.sqlite -*.sqlite-journal +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index bdea1a3..584104c 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -2,32 +2,43 @@ namespace Database\Factories; -use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; +/** + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User> + */ class UserFactory extends Factory { /** - * The name of the factory's corresponding model. - * - * @var string + * The current password being used by the factory. */ - protected $model = User::class; + protected static ?string $password; /** * Define the model's default state. * - * @return array + * @return array */ - public function definition() + public function definition(): array { return [ - 'name' => $this->faker->name, - 'email' => $this->faker->unique()->safeEmail, + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'password' => static::$password ??= Hash::make('password'), 'remember_token' => Str::random(10), ]; } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } } diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..05fb5d9 --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..b9c106b --- /dev/null +++ b/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration'); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('expiration'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..425e705 --- /dev/null +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,57 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php deleted file mode 100644 index 621a24e..0000000 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->string('name'); - $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); - $table->string('password'); - $table->rememberToken(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('users'); - } -} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php deleted file mode 100644 index 0ee0a36..0000000 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ /dev/null @@ -1,32 +0,0 @@ -string('email')->index(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('password_resets'); - } -} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php deleted file mode 100644 index 6aa6d74..0000000 --- a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->string('uuid')->unique(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('failed_jobs'); - } -} diff --git a/database/migrations/2021_02_10_203938_create_configurations_table.php b/database/migrations/2021_02_10_203938_create_configurations_table.php deleted file mode 100644 index fffbe50..0000000 --- a/database/migrations/2021_02_10_203938_create_configurations_table.php +++ /dev/null @@ -1,35 +0,0 @@ -id(); - $table->string('code')->unique(); - $table->json('configuration'); - $table->json('metadata'); - $table->integer('counts')->default(1); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('configurations'); - } -} diff --git a/database/migrations/2021_03_03_211200_create_log_configurations_table.php b/database/migrations/2021_03_03_211200_create_log_configurations_table.php deleted file mode 100644 index 1e76d1d..0000000 --- a/database/migrations/2021_03_03_211200_create_log_configurations_table.php +++ /dev/null @@ -1,32 +0,0 @@ -id(); - $table->string('code')->index(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('log_configurations'); - } -} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 57b73b5..d01a0ef 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,17 +2,22 @@ namespace Database\Seeders; +use App\Models\User; +// use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. - * - * @return void */ - public function run() + public function run(): void { - // \App\Models\User::factory(10)->create(); + // User::factory(10)->create(); + + User::factory()->create([ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); } } diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 5ba8e62..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,74 +0,0 @@ -# For more information: https://laravel.com/docs/sail -version: '3' -services: - laravel.test: - build: - context: ./vendor/laravel/sail/runtimes/8.0 - dockerfile: Dockerfile - args: - WWWGROUP: '${WWWGROUP}' - image: sail-8.0/app - ports: - - '${APP_PORT:-80}:80' - environment: - WWWUSER: '${WWWUSER}' - LARAVEL_SAIL: 1 - volumes: - - '.:/var/www/html' - networks: - - sail - depends_on: - - mysql - - redis - # - selenium - # selenium: - # image: 'selenium/standalone-chrome' - # volumes: - # - '/dev/shm:/dev/shm' - # networks: - # - sail - # depends_on: - # - laravel.test - mysql: - image: 'mysql:8.0' - ports: - - '${FORWARD_DB_PORT:-3306}:3306' - environment: - MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' - MYSQL_DATABASE: '${DB_DATABASE}' - MYSQL_USER: '${DB_USERNAME}' - MYSQL_PASSWORD: '${DB_PASSWORD}' - MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' - volumes: - - 'sailmysql:/var/lib/mysql' - networks: - - sail - redis: - image: 'redis:alpine' - ports: - - '${FORWARD_REDIS_PORT:-6379}:6379' - volumes: - - 'sailredis:/data' - networks: - - sail - # memcached: - # image: 'memcached:alpine' - # ports: - # - '11211:11211' - # networks: - # - sail - mailhog: - image: 'mailhog/mailhog:latest' - ports: - - 1025:1025 - - 8025:8025 - networks: - - sail -networks: - sail: - driver: bridge -volumes: - sailmysql: - driver: local - sailredis: - driver: local diff --git a/exclude-list.txt b/exclude-list.txt deleted file mode 100644 index 320dd8d..0000000 --- a/exclude-list.txt +++ /dev/null @@ -1,107 +0,0 @@ -.git -.sass-cache/ -Makefile* -exclude-list.txt -nohup.out -composer.phar -node_modules -.env* -.idea -.editorconfig -.babelrc -.gitattributes -.### OSX ### -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two -Icon -# Thumbnails -._* -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### Node ### -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - - - -# storage -storage/framework/cache/* -storage/framework/sessions/* -storage/framework/views/* -storage/logs/* -storage/app/* -storage/testing/* - - - -exports/* -app/config/prod/* -app/config/stage/* -resources/assets -public/files -public/chunks -public/storage -bootstrap/cache/config.php - -.phpunit.result.cache diff --git a/ghygen-github-actions-yaml-generator-laravel.png b/ghygen-github-actions-yaml-generator-laravel.png deleted file mode 100644 index d6f4c135244708313a5714b44297ede26a3f7cb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109581 zcmeFZbySpJ_co4=q;!`^C^2-yfFLM>fRuC$T|;*XNS8>rARsL@LyywZh;%b_cgOD@ z^!a?B=Uv}Fe(QbzeOPOjbI+W6pL6!v``UY7`yN9S-^gHNkYk{sp<%yzDfJc&?YH8f^-wMN~Fh9&}bwKafP8avV&8k?Hih%#;0A(&{*jYOH$dF46eZ6%G( z%wM|O8!NlNQGvKyLIjPNz+xC8u0ntSYhyzPkiC(K z&|4|#ze9j4Q6@7-M_VBf$i>Bl-G!SSYHteS6ciK$ad3gSxY&RZYz}TVjs~u5HV*WF z1Pt068B)d$5PNf5M{}qRElQ?=A=JrHl!*z0_OECOM@M^e!+)gPIItVseBy+$e-~-5=IWF%RiGS8{6Gn{JF9+znRI_z}~@F#m&}Ol?1j>bk}TpV1SY@8fy9NZ$H|Klsv9RG8}3s=WiMq&cSf)GwaE+aMr zej^?>9wPw`HUkrG6E-exV}5RaUI7y$KErX`Rrz_2neNJEAu}}xw-hOm4EK|qq08(|Ls`*{~whR zH3fuapV+;6K{@k0rPo*#4Wj1H*)F%oJ*`0)<+M zNgCKV8;F4Z&yWAtrTkeP;KhJHgZ}Y);NlaazExp4O2;^>i? zX>QtTrIV$6(QU)3!Dr*fYk?Rx%(S7;iKGe*UisebaK7qaH9xx_ywJ1HIJaN3rdqu( z*0+Ce)40^r%^OiK;36S&gKB8ea^59({=D6=B;@(?F61eIov1&2<^Df!p5$iUx_S3f zPU6q-=tMshv;zC!yoY`BM%)mC{N{~s%YOykDB{05`mY_K4B@{n@?RK1*};Di^1o38 zWe5KakpE30PkFFcJq&^h_^-UqzH*t+B?!BS2~>TqHO2Z@?wH+ zus<$E$~q~QzT3xyp-Y$zG~ymEf}HTAEF;!EPO)C0ER-QV z0uaX%dXxw>(QnS1;{w|kn1;`LTB`Rt3u{?TA3tuqzPt`cDhP1mh#AREy3CZ~=LNX5 z9hVF$_djtqo(eS^9gbNiMcw~h7j+ZrX4i#}GPMo4IXMhs?mrpqe%H0Pmik<#=*m6t zFx^b)vD>67w5Nh(d?Hz9-+3HLnJ7{s6pC>OK?&)nsob0-E(KrskJcXTQg5psZaEmX ze^Rhi9F_S+eWrDsyVJ!GfKkM^}KkI zmPDmjteRnk5Sc|gjXul+-1M@0sGGlG-V^4RI$g))URqpS-0f4>A#-7^Zs@XSd_13; zuZ$c))PhX(+|3j8O5eH2s8!s)d@VuAd0C(xgt{ATCG6QSTX5Fqx^PctR~O{RCcIs6 zS#An>784UAu;0y{os}ixeOz}g?8Sy?5F8H;l(rm`(CEQBz_s}kUL8N{F9$MDR6c=- znf7i7EG1^wy(_bHSn3W*PEHO#ojtprUiTEg{+r6LJl~Bc;Wk0GMTD`iBRorw&fz|n z3CtkSHV=!1E)B4ijUn%U8~v*JSNK@!SjDkBVjx?l{dc~pi(N0bM*~y8&tGNND)yIi zLYxl`cy{4ED`m@RZOI6d;V(@!0Ah(td0lpdKWWcs}QyZYt< znW*($>TH>)-skxGw2J@QlqllMU|#}A4-Xp~TXfuEY;TdQBGNC0UF;#2Nd(^GE2$#enn*&b(MEaw2tJZdpXOc3GqrtiLFFc7>PbemK50Izt4KUiDCC1P+xOSjujIx8yW3N| zHe#Yox-Bf%xlH7TKDjdxaC~F_Q}bL&?GCFdRU>=eRQ&q&OJKWxU#Lgd>u|_*_QwP6 zVSa4kV)gx7cm5i|tU~ON>2$gvFeWPY@tajkAOURg6(RQyc@ zrcOOmc@IvP%5+eLF1!ad0F+<(@8?5{%GHf+TOy7!rQ$vKC;`OY3i>wdK3GS1-T)7E?bk~ z8p?;}D0Ni-QHOX`oVDwdJt0l*CAUpBC77L3thF|w@M{?vKy3rsP8L$$N;q$~G&L@> z!pHLS((z@eoK*70`nKx1`K;G2NGoAYd!tHjj-^X??oTK`fWvp6Wmo*Nm2a!TV(psKW5=eP4>H51Va<T~$m!p~2T(QgJG+FJFS$D9jswWHTbeJ@T6U8H_Q@_W$F z+c?Gfw1tzARb)(hI<#4NwAu~mstmBy_`a9_V+k8o7x8V(=Gy6;*HJ##x*`<^tJS-0 z6!YEOeUtlQz*-UfJ|y(%=bBhLhf~aB7e>&Q9uasBrz}PK&qO`Xffr;I6E<~h5SaBz ztnSZySf12&H@?47RgR5o+TAO-oJz`RC?zE&Cwjh-=zcV|yLNV{q@_gypK{i!2WG09 za_EPVK!8_vvA#Et`iRuvx52DpS2NIJpQq7SO9%n7U$WgXneE*-TA0=91t}bsMORjF z@%3i5zcJ9GxUk*7Cz%&828)G`lX(&`8U^s7k+#oN)O`4$!VGfyp7jK<6>kE1HEkkE zy^AR3v3eesq-zz8%S*C~lD(1PVdHKXwlLeeo3EFQZfad7{Rkb(pnb1Q6`RXRYnNow zOtPgT!x>%^yI5Y+IW)c z*O`Mw1r{$^^^!p*&iMCNU`KLHKl2wPBveydiPqEe6_e(rz zO=vv8-R=IBhYSLrNXR8|xkXuGXi{Wf;2yVLv0ObZP`l>1&ui3pom*Gic|C{g13=iI zJil>wa!_h!>Mi#c>>E~YmWpMx=Bad1H5a7OYOI2@vcRJB*z0sL0l73jo(M!etI6sz zVELheQp$%5X5@TN$1%I=su&SDoJV?Bap9*itx>ICm9m9;B1P7w$hI@aY)A79O;1N{ z((d&W@!x=+uS=0*b2C}Ral>}0hf1%M6s70RkKHJ}Q(0Dzqok9o<7;}xH>uU_y!Y5r zvM&zx+OE19DOC$gqvqLIj;nL6ngJJF%}a|{>g`V92WO|6Q}JjE-Z^+@@Ry>zR2U1C z;WDW(>Fr!2qj9}HN8Z`?@hQ@%VDz@%@8R^hx)`lA-?tfw6uK7G@^}FL^nbFUA zU9iUwDii8t{`V}pnOQ$ITaoroKm~b5k7Qi(oSwn=PI~ z@ciHa*U2~P#e2cQ9esb&-^^>~LLX+x(GOftTGK^2sg`>rsWf23dWq}o`*UQ>YcX;l zvGvgY1PIil!sB$_82wsQv~h5#1+8QI*Krv|{D~YZuySkw{8D%=O>kn2gf6}{&r|4K zyNg^NDBEpTjkG*uO8wT(>xQ@6gb8ZdWlAMY(DQ!5s#DAJ_%SM;iq%<t zwnibx)h0t>AZgu&7cw$3jxAa~jSc22u8UaFs{g_nm2VEp;qUB>+dLN?ShBLR9zO^< zns(?DCE=fTRleBh70%Aj&)2d@lm(4Y61 zxr9?Ptkqagz*_z8xky>-SOY~`7T}MVve`8jo;M*6n|!+K;rsW08TgHXt3Geey$PWi zzMA!3VdQURg`Y}U8}4iQd09Xp->Tg&F`I5|(6V&K5@SVK?WQUdY6-M|^X)p-^3$JR z&n}~cdw{q=fD4X2eUp4;vp!r5IMSw)mO2TGddbFc@{!+<0TofYsCn*K{^ga z!WO*2(oQFI)Ujl47rf&KW4PFC@YKzRb|G5`6uOnNrj@m|DVfq;pKE*WzOZW}GnKN` zvMkbV5Yp7ra;ae~&1MLN7l-_SUa^P58wjaRTL(1l#hZSM`z+kYj{Y467UB+6C1es@ zUw2S%}yxAa)do@H#N=hI7rB-?Q_}c1E_p@OzcC}*7p<-U^ z4~xKpIsYQC?i=(2nGZEMXd7Cxp?eTTCGVID49s7ts4m7G4O9}BD4!u_o$(Z?WuHBJ zW_Xm7(6;d!6wyu$imV;4J!u8`kO>2ZzL@Mc%%*e|be@F*-lILc0Uj&ajjtk%1{Rs6 z%KhKj7nWay7qEv&O2@X+ohP(*eD*h7@owcTDrYXZPtuwR4-3p{g3J2G4i~GKgLt%-L8l7xU0t$T#PzZ>4Kfb5{ExyM6v*&Qsnw|n+HgWHWj(Haa2Q%o?Jg2S z1-#{6bPISHNl9&3Sx2?2^R|>`ltj&l?3;)*7SN41kfFN!D|Y}C?@iR%8;Dw>eKo^p zH{X&dU}xxwq?idtIicn zIZ@*{5C4Q)7;LUA-FnU#9?W^3uqgBTau zt&>dY4vH)Upb|XcuJ$8CuFO(f|G-<@-wPz{2K1;2X#^oE;Z(c=BX&n-u8Wz~2SqNe zIi?LPSKrKKCeOZ~o&1E3w01gaIZ&Z0uF)W@5(F4>^cmNi!*a1(6qBUQIKhiAS0RPC z!c>nORX%q%dbP$r{RHWZ{b_f2Jw^&{I2`_3SjV92wiq{6@^tFLG1kUgNb>=9RPNf- z0UpQaj)c#e^)u~(MOpq*Qr&e~rl#D^uoWjHS^`uOC0c0+@jONhw}2Ar2TEz)FWpD2 z;{f*@ynh;g+{aqKyd|(zjVv#}W=Qa4-D=ow1Ydd1w}fzdjaMe}ZTb~$%#ci7f4^h5 z-&1ARCwlDYA@4Bsw9I-m){M;448(ZHUP7YT*P-_({XFI}6){01Wz0Hr!+h)E#JsRe zame^g$$CN*_@)pSpHZ*1v%_-BDH+`8ppOc_zS@KW^Nv?pLI7Tg9igVA#HkM*x`;YE zJF8xd&uC)j_A{o&=PfJwf<^&R) z*ARff(D?Z)A)J)+vDo=o*ZeNS>-l#6DZ=GchhFLtLS6)UoaJ&`@ZvQoLrS__G=2wA z^Ig92)@@Z609j3zEZr~?oujhYlewJI&>kgf?y>!|=iDB4H>hlx|#HN5v^ew}A z+oRQOUd7^c5Cd~|&OL~4g*GY?jOYrnKYKs|SbGL{y}jaZ9dE-)`_m95oh?3;t?%^4 zTDd>on{aVVPIH|Pu{#(*Svz2L$m#Q~^<6Q5W9xmM+z4IhxP#o!IM@D<;%U)TxG603 zGeW7qAL=}CDjb4xPlbe{m2;5#+SnC6$%g>DGPw(wOA zVaRm-spvH1tkPWLIo-d=)mOUaDiJ%5Q9#J~W z@w=!$S^EG%4)>)I`p0RZB-_LeffG6FW-sPC<%|tw9{Wo zB4^>d8JP&9Oo(qoPUh#nWV`W>>g___-IBSSn#f<<4G5F#lkIC|f(PdfC>N}a9%^JC$c4y&?ZNLVWgiyhxzdhDQ6aSQoEzKk^-CdT_>9>-`n9t^TmEE@2@u6#mpo57i zo&0r``(ZMQv*udrkyQ98L7tiCd7L7a^OY84b8)b{TZ2m#zs`K;*G{K|U7sq!{02eL z@*nX*u??ryg>;qJUo z)N%nzr{sP^lLUwypN;XWzNC2*ndHOyY(xoIv9DO>*VRSl@hiSYr8_D zj(1!ug0-LxY>;6dD|?(6w6V<0&kCd>UunIs;*{q%K22`C{QQj;vALVdjpAfe9=D)04Vy$Fj*hcjUkvj($i!5ovT zVkt@4j2|pBKknBz&L>a|S)vp+EfH}?!>W|Wt zV7mk1r>!J9v4<783K_%zGcHQ)aquzGYc)qnS9kidDg@fcs#(e0i_q5$&rl>7(ed%( z;o*5AieRa#asm`(khe(tFq#dRv7nj*M10Zw({6mAGfBH<34%0i8l|g=L~Uq6d^ND0 z%Y>Jg*KXxA#C@|HMOLdL&iZyQI+ts`3Qc-b#~R}ESg!YbQ=Qg_TjSJqiMFX-96guH zyX>6{O#q^$%=Kr?n~J0QEHi2$F(xfl^n@Q6Grsm~zcdTu%ex`y?pXX8uBJbrZk=cHAKqEBWYh((KZZP^Tc z@va}MheP`|Ix}VpG+tNna;DuTIcWW2B)LTs1>sV1S z)aNXZr6M{1hKU3cY_&c#dr1k&w?W~|5pH?{Pwx|*%77BCj=<>=OnMgGPN>R|Rz|jt z*)&%!i86>S!9ieYyDU{4N?pE_oCUiyZn5W zOADTF&k&?5V5zTXO=xVG%}Ko8vGlm21*CH5W0&~QqB8FyAoCUmh-bsAiwTeVzSJ>? z^5`WtaLwsbxQ4@Fz)HvQB`+yDAT+M&PMm9(>Sl2ZW*7e>IzU z{f7+($b#L*<4dPV{6p-0cUKR_$A**Dc6QyIC{U0B`c5eB!$Eg**90iEmW0sG10OH(Jn**oT-a!B1B2%HFdAXQ7E(oEDwP>%yH>k=yV#H=|_q#b*HC&cml22FR9C_si_&X zG99BE&=lgbG)1cc@OUIHfw)aRLr@H3Z{MD3k?Q=CCV773HGfOiGGE(%sZGT4h;^8? z@OW)QV|^tD4w(`;QaYhMfIg_@q)c+YTJl-eSB}l?*1)zjyDR>TaJHV}SAD2n*;#x& zY>9d5z_smSJ`B_;k=%$%8p>>@YNIdGbDIcLy=nZu#(IV&u}ZPWk7dL5k=@7w zB(!at#>Z*xinAyII#vmDYWXlCMrC=`U!jKytfv1O;D}ivM!hMLTjwuklm_>O#8XzQPh0X27-7kltR7bvWw5i zOAlBF(1)DZ(Ffv1Q4-*qE&%$W;NuvGLlw(LbUj)&^}D&@8vFgb8WS`t6ofnn$yt8& zCr1q104Pma0Nw|#J&rp;xD-WVYdJH55yhhOSH=`KFQC@gT}6-)RP?#4W3fN&=)4-4 zI+wk$onz4$L#be8CKO(R>d-hRW7CL!Z=CqltMzs?wq8YRD^Pdt= z+R3zePJH7oF9-L#7+puLH%|ayAJl?J|6o~2I$?Z*z61farrggzM}~nll0Mll^)2e2{YdwzeYWh?R!;HbTt<~CL^{t2l$)^&;|9V z^zPjl(~!k4)BoXj!&^;gIGa_*VfBrZiO&ELPCfi9CE>O0kGY!2fgF^%b0g}Rudaf+ z3@_WLY9c?)9m)&Oe*(Xw&hwi4=(?8^*f5S<ghboc8$R+T&D~i=P0fU%U0Fets1JPY znWq7?*m!V7d0Ecyc!l`|774F@3r%!dTG4J_S%~Nno=+_#ZdZqD5ed&ojD57U-ozWZ zuyRVhYJE{=aS0RkZp@~i|Fz8?VO(nUDjF5hS3vhiW-|VyrhVoX7NPeri2-Kc!^7iZ zO&t*##@;Bv`1^N@OXEIBNl!21kh{YA*Oynj(Cf3(-O13!sajQT)1%a)G#xGV1i-&b zevV&>&tzrNt(TnbjCO2GUK@$-8cNDtU1YhMwYF)?j9Ds_nuq_)&?9tVb@zg2oUd6I z&M$|}yo|k}1aL#)^^X8fS-2+aGo<4Ey-tGc=p~Q7T97<7p4W88?G5 zov16is}XhT2qy~IvXE>P3T`k%nnelSzPTZYK6fn2<+@85^(3>ep60_DE?tS-dHZpuH@<))2)~lIQ zU5aQO4D#}|P+Y3yb#$Lf{Q*nP{qa0QkJlb0*+xSEDMrQJcqwHyadn+Bb@ux;Hs`WO z-vS2_%7jQ3tE|I*^(dHjdmwjBy5iZQh*;Esj#FvKKbz z31Tkrriq9`6_2xFt;y99oGApWn4*Jt2}DY&#TvILYHUV}-1<&o%4v26$eX^mX05Cm z`8rQZOG`%XeE8Eqy@T(S;dwNjf7pC9UXI;P@Gk+|l}u(9_VDtU3m^&Q0OE(?MC7oU zl|=*qlLMo_iA$}=sr!nj$f0~&-A;}xBN%)1Z5w*TGU1b;g08SEAe>q{`@Jx;=`rdF7g+0(b@A?6;AWXO^5`AHz=MYmzI2xGU09_`Pl-~bo@bi3{z(DL z{mb3$^USOZX4Z}<7%Xyh>}+^uUtUWqtI^K19)P1Fw}z*~&`D~qa|tpuH1oJ2P-kMA z)367mB^XZwY^eY@bzbzb8JhGup0XP?2x{xbG;OOiAIt)}IPnA~BVS&9Du<0AqriBU z!$qq+mLTRZfMGS=#LC=O>W}74@S5#s?&#}s3V(OfLSeV+k|2GKcD>adql#^}lt3L) za2a~Pg?{oZ8Q7s=(??Y$2P0KE5sR0pj_-_BHq|TDJ%;$V!sFIqZF>puw(a<#c4&gl z4mM=;LwzucD7#p+Yc{+XrL$X*@JIIF>CCFO-3DFSjF02@T{UvXmyF@R9^pZSp%#aA zm$+9!zhSULFUu-eRWS_b5fR*s z=ve=2wW2Kxj`*1H#=>z>DI)Y%Q?;9o-}1g5jl;IvGxVRLeS%C0%~S->(dh!rNc;&G z3kdaS4l98+fy4dop6+j!$2L!xnAF#)71Bjo3x*1Jr;cYJ{omj3?CwgpM^Xt+=Px~F zsbQ$FT{d6}coct^v>Fi)ZewH}O2HPw2SKn+_Em_tPNv3t19zrEOBql2n!_&uFeRIrg$pwXcwa|CN_u(e~<3t zS{O$?gz5ka`H;@WW^rKKSdRY|(^lvi855KdDW~#`%RcNk^{09|wAq2*SpMT$**+AO zJXQQE9^C=IZ(lfwKK!9hV7KLr5h}Z~38D*l^jr+feeBp^cLDy^QcX=QxYkLz*e)zA z%6^W^*i?c>K;ZO0y3s@yh{??@>q9KK2R#KgsYV3gO18~&8cns>?_@Y_B%lP-0K zV%e`XJJoGU@~!l(TK35AVMgww#XosCB?iB1`e{f~&P^0jW3@cKFMOV$jgwlR6abdg zeY_wYBdzZ3WMLJkCkAa3v9SxeEs3ZJYze=;R8~`N9Z8`nK*|~MlqEVlV}_^$LskWm z$W%;`Jo_nX%|K3FnDq52%NiSV46-9m%1ZPSe|h_hT8*fhjsqtSyLBP#*{?-mn%NA? zAz`ntugFJuzqd>ukq(U!AF{UAZ_+aqKB{AXqJKUn&{E&AWKFX+uObtg37Yu2d9{C4 z8-zKKpE~)v0OY522f|ZeiRQt=xu*3>-?->Oej_@*C{^&`U1sLDw1}^F$I1<#m=Ml7 zN#B}(ySGa#MuLlU_!yhtfS>>j>Jf2wy3Kom!h`N{5D8n;##lw-CLJFi@zt$c=;H(d zl?MmpQ?FTxAuIiKJBPaxDST@lea+)bY+AF+@bcf9?>_^50n@!o`se5@fSP$3@o(dL zZ->+pUx->MG5dbjlbLr^!GL%=y9RM!W!$hP1U(D~;`pLEyvV=0it_Tq3ls-oQ? zX46V%t~n1D*>r}^Z(IG!R-#lv^Rgy#J}JYL8JJI8luDVsJkY z&XU2zY=mbm$f;m>3sHt~SFK!1R-8#!A1RYmO@a3e7;C+9CfggiT56vkm>IkWtbQOr z4&Zn*8+4TuPs3EP9WfWd#X82Cpn{Xx)Bw_##ob z`=i@ra)BvbTgMw%H+*#Sqie0d_tL8x3|+uNbF?;z#GG-X)%Ru*P}@0Vgq}oL-c|hoS_-Uv zC(=oVatz6?aRaG5AqxdyW$BTR8YWrGjy~nO?#STY^%^7g($si=6^H*EJ^$IKggS$R zGv*czxB))N-INsu4!14bsYz2$Xz{NvPf6m2J-xhKM?<)PUaRMR&q%e~{(Zh8y(s6+ z0-qgzFqlR{!h_SbL-Ank5)WoG6*xJmjpI_NE9`v2Qv8!u#C7x`T>vi1VGW-QNL<4% za9C1cPc^emSs(T2GZWACk+IE!5k#MEEohq!_1~o{oZ3Y`QD?-hdM0^mwyvRI`Rr@6 z>E(L!xKu{M=n$_1IymI}VGu+W5qwMMBid_eVdP#^+CWv32?GU7S3}v;l9F{lh4W`{ z4$HCcr0LWf1h&bYKV<#P zt;L_3^5veL7(7=NIca!s(N?n~1bz90Q2*rvOG=GtoDuIezaN`paC^WHv(ltae@5rZ z#A^~ThtkPM1uSMeee>KA{qoe{Q3o%)Ne|3&KWqM1(E8f=*k=#8jmYL#EBrE2paInM zu{p@@YEnb)Y~d4m6-%AZwOBm6)_u5IaoI{&YjEUnH>?kulaq&>{VXZF&ec^SvJv>G z>49v2G&$MmFu9@VRbvE>-W#cvDW2(hg3bQwl3VQ8a7<6vlA{8g_h^Y?9k{d%gP$$M#4fKjV@Zj89h;SBuXN&)KJgKPoW3Jj zSv5PJz`j$4PLapg-g{b1H+*?~ZM-Nzg1$l~=J?_^E9t-^em=(+*Rb(xG;IZ$;1}s{ z(6uJWiYcq=5^99lD3DlFF8KX#z3_;m?4=I?=dd)pLn`a&I+?~bawa`mSIq|4b}$Zm z^6q);qvyd(F}WYqPL^xk9&&_C+*ucXt-ohT;%E#a-7MPsl5ZeuNx=AK)_^H)1bDXP zy0k!}?&v|K)j-zxam-I6baZs_8Sl$}#5LO8jmi9vs=N{&ezC(CSQOb(ec?e1YJVL~7;|%t z=t9haUi9RkAgIYuuxWe$dPkJEFgl_0eLQw}+2O(K;;+dmeEqllT?L98%+^IG!@3Np zk99tYmA99?u-3OMnY!MZ9{D}}XewEQ_Qc|`rXV?zB7;$Gp1QF~!SY9^tpktr&fXE} z;1Eu&W_qwkMpeET;}I@*pNrKLv#CV{mtyP3ZOabRU+9786) zs#(#6VrA9h=vYGZ^+U#k@}Q9SI89r*pR1)_H+}<>m_#lQ7}f0$Yo^$@J3gn7JTSKq zXd!b!yQRolatHln)0dXDH*mFUN_PEtYf8rX4Ieq56*@gVJ+-r%V6Bjl*;qM4eM7@Q zsUDaaO~m_x^u>!IkE>6Ku>s0?Z;+*kD`{;{5lYIn=B6gU33>IwZjFkMNgD1rhOns} z{u!BoXx!TjW-qH&SJ8LYD~apV!mp4gm>Z2>yd*z?9a#x@&T5}`(+nsg-|VU-DAJ0T z#>d-!i>F$2%@mr)6``dn^!ygA&-xzZ>BM$}X$V*M zH07Op3Vjq#FK!oQ{KD#LuND7dA^su093G>u=wayyH3_K=$44Y5XC@td6m@1R@(QVT zdHCVBqov9FtsXYp3(Xj{CqWtvX1@FnYvUu^PKMzR<**!+S{D4o(W?3RnqT5-Y5T;y zKT+wiR*(eJ7E!x1rXPMi!YKW+hxciV3Fx95o3G zcntbShL25Kj}|<$v@}RMf_(Q|b7ut%CY>QhW3adI>Khy`GrunNgpomYUH8R{7u8

oNK6utxQq-5b{hF}^`H#X`=37>jFua}&ac9!qBk18P6Xz7e)4%tW-?fM-^>u_ z4ktM8dFX4xlhqw%T|cF!9JEZ5Tww_Jw(aAm{Ko3SNFFb0 zjJxYUF)`b}IMVTRd0C3TRFwy#rzC4kq~hLMVwrsZmt{hOy}$|P`Oi90ab?tzrE9*h zUK*QU&(nDF{c_(|-DOg*%a+0HF?;wUCgeSPn^Q%ze>J5@@JRjDBDAb1GauVg>NeK; zy9e$<&$X+wYY^&y^?al2R0#aZviN=zae2m~3Agz$*Bk_Cx~rF%m^{1KC6F_$B74lz z>nFfM{%ZmA5m9co)C|5o)ge4YeT9^^ubzq)6ln9q5}j}{V;+ThQNiE0eJ* zx9|nprUhP6yt_84@>D58FJHbCmz9;R+EP_i^i6@=#1$0S+1UlY{4%{v{PgKl;4#AV zU+&U(^q8gatJ)X?%;Is8qx4FcVl=&0Sl(?~R?m4}WY^vofMtn7hn`%h4g4M%eU_Zg z#@b&%cP`bc$D~J_5Onm~srvx0e4MH$zdUo;a!x;>V#Zktl5Wyxep@mG#~EZ17SgbJ zI*lip`3jt3i zIq`Fxt#=4-$*ND(MWm#pv!4_g=QolD1;{<`>gs0G5d+V4PEHgg15b$?9**eI^YO(u zPsPJL`lxfNJn7XtoK6MN<Lg=2gj~Jr2lhr$1KFSXZBs8MzMKg8jW-^I7xdL*?WjW5d4Y-9WHlEQxyVOg(W|o{HNm zpvYe46Yj}-QOsmTiNV$(N*VRaAO@t*dh$zJwEI;R(w-K#Y+6lr8>kpmB$U0ZQ{`v} z2+SQnFaplR8$*BvoP` z+AUF$K1uTzV7YJq@s?~0U+N{48E+-?r6vtm7dtbD#cgKUOyxvv166rvXTGMU=Cak} z8N1^xoy0`aYzhDSYZLSjtgNjE5I#OY4@PQqe0=z80V4=ZGg6`>%*)OTVgIBOYZC$APq`@1qB3Y01!U2 z8_RL&>3gTt!L{>OWjfs%3}#5pzw-7r{;yG-n)sE6Wyf7GGnE8uuF!A%U(<;E65t~R zbUSN|kI)eEmXQw|)^;0+n#xY;f%cAVkIg!e;Y*1=A%oMh{$!~#F*g2i>(2eJ^}{VK zcL|u@d>`Y^v)eG^sBe!7l6q^G^6YaKx_h}PhY#%D@PK#pm%ze?g4~Ypcu6>7FRhNS zxz;14J~plyecvTu+Szr5R=aEjWboTaX=)~G9=}rt2*+zZRR{fRv2ao`N_Y1m8$TTA zzn%p+pIljAZ{FRSuD0EMJWn7Co_IFE`TYGW%&Hdp05d)yRkK)~HSBz?T|+70dddqb zdpKaUNs%<0(3i50e-6|ulU_fr91)+T9#jNb3_mRylcW&;F1h92j0dx(xrcU@I)J~a zZMGz5JyM(`=*(_*hZFaqzC6<-w3J+U=B@pz{*md3fjpvfBVoW=yk99d#SV*IxoXF4 z57s(a7U`Vd$=aT53p`vOX!H_}8$k~nG&r;8x5`TRE?`3gq^+uvT0|Hh?{XDVzcjBU z%o^6tlIjBNhR#u0)&3Q6n>lU&{hlqLDj2A z(mKMz2P*@TZ0CE&xQd#eG@R95vjXW{w!*|0%}Me-ZcEw&n`gRt6`~Apf?+_=(2=8A z`7Tm&d$xFUcKHsazRg#%ytDPhRfrY5wm`3=Y!DuU*CQYSvkK>yc7hp`fBLq(WES2K zHt}39VVXUD**d1J0T28@J=h)n?)Ug4HhoKJwo7!n1riV&1qhCHD z6?G@Xp%DteT<)8z=*#`y@@4+co9Aw~u->vaon4J^_*`JNkntB%A<8kZb)pCKAM5g8 zQ)|GQ6^l&s_mYA9+^~DJY-eTi9^w-AaCMc;V#ZWHF)7J#?RTH;>U^uL`q0Unoe$#J zdE3A*zjgoupSie;wbqt8>`@lg3ITsUvATyhK2H!k(;j}pBkSGfmfV%e*h|G9{&*KE z1EjAUIXu47?^hcq@qK@v@L+76OuY}w%rb&O*Z6pru_`D#f-oo^_MuEAXuH@<#7l?n zh}FWsc4>&_ox9~ZN%Lg*t(NAA=R5kYx=e(~vinZX;(L1u{I!Zs@qbVsdhT}`>JGk7FgTTc> z=eL&6-Ss{zL5u|6NE_}$KkArr$OaV5kN~;E-E3)(&z5kT6M!K8n3R-%o(7e>Zk$I=sLX{WMz1FHj{3LiO~(anxts zXo+}k>-7=S!NUPQ*pi_q_%r8z^@GQ{bJJavOLh@Ygc5lJW;A#R+=u*Yln(DJ4BuTJ z;|42O-`6U@|9a@1GJLz&`GT^g-=sKA?wfZg%gh8VrIy(6z4*2bpGJU*HIRvMCVKAX zozKg{!g8=V5w!o#xQCjPo4a*Vu)+WW$=-8+wPgKHd-wLOTBprWwv_9Zi1m?g zW^>QwP8~xv4bwzDh<6`8%o&z-3|G{b3z|jkdj{jJ@nP|k`j&=0jyv{4+xJ|VhDe5L z2`V+p9}^N={?HRU^&xPdfb`|43%D@FX>{|e@!+smD+72yFWO` zckae=DqDk)c&&1eD0m&IsY#lL^J*yzs4!h%`n%mRle3)np-W`F1V0+VF^V3ivk z3#%n0IvQg;M>!e`8Q{<1?nUU9YprND8|+!(tcYF%R-x?;_xmbv-V@D-hVkJxV=iNK zFvCl^qH65R_x=y;W@jY?goT^i+bJOR_4-ytHO2L;Y;2sSy;fCIh@!h`-Q_9cfG1Sm zL3zS%TxN}@UPVxE1243iK7P3T6svLF#sHdVPsTT3g^Fk}2T3{>W&>gepA!~O-f=Sd zP3)xByJ(QrlxNARb<~^@m}t#HG~-!=~*yVtO?|tDrs+YZyy+Ss;-JnPp7tzBd&da zB`Y$wG~L6zx<-J{zVeF!ueWdCKB~4P0e&?cvD}xD;Gyuo9{pD(OLVTzdyy+z6m@1Y zMAd4zg){l`t!!T$9{SxxUI-)ba8Mu;h_yaJ;9k9I#W_)Gus0SM5%;cQNf?Wa>n<>( z*-RsqsmJg8uU@@E7j%1Tt^?%fsA`<&VU+;As#@RkjD%`jf>HRJ$5JW0-#!}t2o98k zG!|#gH6Ogk)^BTOO&*gRy`s7!{zjJ*mg@PFb-I2I+no9pTOJF({`sWZqxAu;=Hvnh zW1GV7wIVeh2G5OA9pZ+e4vi>J_gB}x7i-$U)TFD~awZNZV3DOQkt91|`Z-r=&cr;`*ZToDh^Ci>dw=@WWZJ%t^- zx~bPXo~X$K?EqTA=;rokP#gphu5@0ZeXxX%!I)f5<1N$>rD0w-9)MQdOCvNuI|P zh|s*C8sY}h!gl`$xUs{CQ}?P)OCTcn$s;ZU6IaZN4)%dWbuE(0y?mL&iwr$wC5Iz& z0#ixiZPk&E+BqC}=C*0FyXdzjkUFqx>=A8EMmBAy@cn3RmRxM05pnf3?uu{jDJEL# zO$nmlw^6Z-8aF(Tq>{Dd>gpBQ0G!?YYb#kk7q_JM{Twm*ZX^TyDMwrfk${Wvy*!&7 z+JmhWDLJ>zF91o!QwR-cEH0iM8Y1plqu`vjKE+}XddJc9P|rqP?C=Xaw9pLJXABNA zITL?yL3t6bv1iz;cr?V#V1LhBki3g^I<$b63Wi@I|#Wci!6Ngsdfp@sSa;;iAjM@u;w7V313H)pzNc{ z&)qnx{_Gd6#)aBl9Z&r>0|wUzLy)E}0U)#NgDOSO0ox=r^&Vh?C%wPqU>j>eIfZMZYXC-D$&Hlfj{?v0RqHEBK zC7>5IK~X2!QBCaRGivEtTKDrwd_xZDG2fx@OJ;riQm!{sa&1eWKmfJF6>7P&prt1h zY(Qnrk)!A3Xve#38#I|xNrzF#&Iq)#gqPuMFLAfdVn{(oMK4o?qFg#-D0=KC#V8ZRY>u>MMh?jMjER8k9yPq(Qnbv|D6ZV%d z0A0Fk@Z2(7p6mYB)T*%~-Vs`_uBsZ%DRg+42tdNtKThFdYjly7MZP}a|GvU*(=iYq zYxRQ`d!KY<@neJPl0ufAcXv7G2H?b=bS#I)#?TBh%Ssbe%3-lkVCpI@Oi!|VU<6<{(L;} zv~HZGKEosPX|A#T&mcgwMS}P?g{b;49JB$FwcSZ zemVDFk$UCGC@KL`Cw-_BB~cQZV~S;XcKra)NmyR@0Xs`+%*LKG@3J_`)(f{&{(P;O zS98DH)~dSM7yTB7udBQ_&3+k?_FRF&oi3uigg8>2trZP)viy7HW>h_s&&cXN{yJKM zGRo?-z0VbDvyOXM!z&UZ0`^h| z1x$~T6HU~9?`jDuCm=uJZzXbNw}{S|M-9u$-d-o$R#?w5Y@&-V_`9) zvG}k`%c~h+S%&6I~?e5rqd8W*#6oOCg;-{;YlDTj|XP6)}W7ITq!b7V~n_)4i`YS zEWLgx(eu*Xt}5a0D0A=mqsE(X&XY~P?)~}mAc~3=_+MbY1NuG#yi?(B(?Z@f3Oifl z(6XUhtCQ=^*tfiK+C4qli=WJvf6;uu5;Gigxx;EUoZUXt(R*tN@$p@uuu*A&`j3@J zUa{=L9j3jV1^9+U?LENoZEnWv%bCA{EejQnvDm59iYR@iE|#MiGS`y?Px~JFTu^+x zjJovUR+&dD_j8$cOX#fnmLG1h>b*U|0iC0x<6sIClp4Jlk)0U??Bz-MIj%v-+rYjZ zeJ@+KK|)*qGpVhj^k`Di_Qk>Q7+%RP!*D$A_q{J%fh_rQe?1;u#dEP-(*6w%iG2A2 z;qEgD2L+2PxLT$I&cYZbw+r%c~xmwg=+VWShHN&&V*A-Un@5 zv#|G7(4er4I`)|~OAi~NpXdNl!-xH^ojmj_fI}DVg~?2KxzQmroqSw53)|%JtRhB) zQq%3;@YhCmR_A?Zom0UwvqQ&63=T|8j+kHpQSUO{f?_6ET>1EZejwZ)OYm6pZKu6jUsU{`9}MWK!}O&HmIDKo~F2B)Ia z07HIz%gp;SAreO}ST*#w(+cgCoH3DP()&AnaodI6CVIlsu;$SHQpK(PU1S6SR zK!9D|QonK0b4btNclm^siXE`=c4KAjWPdgxd7={x=(of&tpzpP+<)UQI5jjhW_?z_ zkKcm@2wYLQp*-Pu+zIQPrLfWJb4h9hZ2V0tZj91tJf(scfh+($h07A z530e7k{W{13jP7Elu9E&dfu~ztqQ{@|B2)20$=Z_enji>Pv{on?Xwfc&ew|@RQ1%n zcbjJPs<$mpZ|^>%C-RUN8DW_0p18mu6k5|%^CTr@#%423BzWGPtt!=iQm;M_T?0`e zc#>C0Cn}=Jy2|iF21KzbU^+9BUnDKO9&gV;&TR3B8cz}@>j-Dab0jFHzQ4SK=dQEu zy|RiF2wx&K?)+1`4e|f~dzWT`cb+Om=R^01?4>Ch0nO*&5LazSX1*~ehE(|s{ zcI*t0twTBP3<<^Lm8rLS!VvJU?PRQKot>R=`mFhmHx5>jqBH@O7xQcU($Ho>zZ=uV zi|R4-xwX>00WvC>i@L5;bPqcZyb6MVb~CJ@LE?A%gKOA zF9ev%G0i_p_MywX_Ip{RiNLMIjiR zvyOGKS*aAV0Km`Jl-@#mEiElt&3aT0TkT#wE%t0Nm#Nr~CW2euh zwS(n3#QMy$I~pzaZMDmVd^RO;!uz@I7&bYT*6pm+YhN z>bm-qFkC0NmH$eL89uFC}O}X+O33yGfHGEWkjb=%TBNIOm$jl8x8i~-ua(c6`Yxw*|3p)A;|i1w0FQQFSd3glRVnsXcjwziH*In*l@AC zm`gM7V%K|p)E_IP%?!}D8jEyN+Dr87!{rFTqZBq%kdi_rbJ&XR(CaXbJ7OXee9oEX zg@q#&ad+RlY3;sOrDRoJDvCfoU(1AkS6EeJT_@xPnGu=Dclm91Ay#?i%u1pjHMReS zT~cC%szYsIZe;$$_>c5E5>J(}1iU?aW?Q3SMlhu!!kjvuvg9#wvl-|aT+I|>*WZg* z6D+scy0r@#pRsZTNWB+z-(8pwwHW*tl&J2Luw>EQPaO@F{^A_8CtZQ|aqdr?5%H-Y zei?t?I^A=ie%*>*Ao|Ayobfec&{DIH|CW-pO7}cR*s&iUpRfmkk$Xj@#J9y0_xat& z&(I!z*F+>dZS#M!424%{P7WE!%T_b=vyVH3!L5#XVQt#} z?pMlxez$nuF}L0t!X|Op{+QD9c?F#uTNz#;wysT?k&4oY{eMTKxyDdSjTo$?2~$Gj zmyi!`{F>ibAi6?kDk*C*C{IA)`l>F5sKw%y$Mk~(Md+?5E0HY+GTc&L#K@KksHzTk zs#5CH{2%POq>Y@d2iXN;qLut(efNsXH49-FVBD$d*R&)r2T#$=|uX>2M@)4yoTkwvVevS@3}9V#`i`c-wea{(HJN z5^un*WC;L{r6Iy3(y8}2JC*8oc6Q%afK(NPO-}@WXNwRVI6PQbYr_8!YAlyvKXSY4 z1MtLhDZ8P8%XBCypjeHbwA}~p{`x5UJgMf=>GAo2aCdVIC%dI*^@_+eVbrMn zmWCK}SY*m#I;!G>Jiwhbs8O(3+mnO({gr!T;c%MM4pmIJvVZiSIM|llU&efX%|Hro zKq~-Mq$k1xq-ndsv;3+$KK@5Sa&R;V`^;aLs`qXkbGA+|JaUV?xvo>i&F#m7+BIK_qJoCw?j5>um-T|QHQQ8{1Od@w9EipVIY=N z^w{n>Tan4gvGHs-4y?wp)9zRMeQx-Cu95g504Q2r??y`Cu|N-xh)~hJSl>b#)T=;! zhmW@o7AJ{GN``9Q%oeLLylMvid|hsDc5_t7kK9MxuBc%2xmta0l6vr;CYt$l@Z z`l!=0!#`5;5tHPzlQcXP-s_~*ox6F4KGPQm+9mgA&c9xL%<=U6|MZvn+k{8~3j;d& zS>$bRtLdMxjF@3Xo~f0>a2Os7#Rg(nO`w0oHk$R;t8rv9z?D;#_tlHCxNaM9$u-6z z0kWNyg@Wkg@Eyw1**-o<9TkA2o!%7253Zk$iOQ$SE{bn^AVGXTeX#b?O%gBk4MY{J z3CJKr0RZYN69sUaMkgxF|KR7Ch%l<FUksr97 z@gqNSt8UddxzMP|Z)p~#Z3)5O*}d`-a|4*yLPL-l5f}?_K{?Kpv~e5iIqnb34r}?H za)~_$s~vJ+1I)E{=uU2E516MXU{$>$2RB=<8RM$>sak&6U%iFkoMO_)JvrT)5g#&L zVXvlePLq>=B6(+GR)%86?X0(P5XE9IlBduF#gE7&qLeiqot*rGg5Y*4AEDm-o<2M}T3eOBNK8nw9Q?q5|Blc1VrRGm zw0wbqMa2Q2P&0X4j9Efd7SLI5HfBF94xICZ*!YU7 z2@__&_AejE^yC3!b+*PMtLgqZl7P3UhHoQmFQs=}I0Bcg<7UMxs6dOO()kF*d@d`X z-|GD0!hW?~fYo*keW~%LJ+o76vavT|_rt$)V^nzP?{8w0ViHnP!e80yhwG28r}faBDdqU-%yA%H%9LAbDcI-G*lA~ z-{9}vFnzOO=jne<;6(Hqr4^a;m3Po4jpD zAA*=qKB3b< z>T%@r?59@#?DcYcX+cY`*IMEvlja6TUndJ+*lpfOURYJqY}l2%d2v2krG&w9xU;6r zHKsd5U?F-C+doTqjp!J}X8eBSucmLkvbW}Yz)Z|B7n5JiRtJ4HoZugc)(WAH+i3@j z2mZSkAXr0aR&B(%FSIhkpefgd&3Ja5_R;$@g9IhLw%gAi-Zmw-%c8Md3sn#I%Wi2f zR!Uy#0IeYL-OBL5=BE0^jFix=l%L``BtH7@!zXk9-|65{l@iIkQ_{S^=c-cdJSw*A zy#_G2*S%+#8@|o@_BJdB2S-SrJcT08AmxqZ7?O?{X{r(DXwAxJW z_STh@hgN&<8}kLSeDJI@6_LL=;j5gX;ek0h9(pLlc^bUSSXB}=qWwhYL4Jtucyd)g z6LcZ)SlCfmKbGXeH^mQ=scJauh4!v1$V!_TLVVwPDKhuwQ9esP{vR#ToSIL%d!LpT zpH`qsDB2B+a+|o2j!zbE$chViOvOJP99es|Ud9hBy{W`RElk>;_B7dQe zkD(}Um)m>@V<>zO3nwAcNP~>_#&f4+%WM`}bu8#cYS=KdeE6fblWT=qHMoNjf9e19 zMEi9q4lhOh^}^?Pkt>DUrEHKtMq~8BKrqTNdP(Fxw-Usyw(`#SPijPxXw z#P>s?@(`Tgq#7P|b#T=$JbvX1BR^K8r)#h}26Ag{1 z96`_FC$zOdqbB_EsP%TdOh?OFy^Y|tloqMbtQ{VfoZ}|aVn0K2k4@I%++Q9AO_(Tm z6jV8yWt@8rNMr!ejkI`~l8pTU7U!BUTVAuR|17ktj*?mbCGi((me;NX&@;5oi{eN) zjkc9u*Txb*x+ZF$Nnp!3-9a`L`QEEO4rRDm&2+o+xOID%#pYHL@EzzqCtIs|2whrq zKbsA;R;V@Crm~<`(-nE$C#AcYY6na8`DqW|&=>U#3lb_~Nl0`c4>@CX794tt$H{|m7wp9Ki&Y-%_O zTV}(Ee{KHI@II9oTea)}a3)f@x?=Felk4Hi15-hdwRt#O20=pc7;a(Z{U^P8`V4*o zoiDcyox_42?hhAhCW!nfjaKXTM$Ub5Muqg%>RWCsVcSgXBgTMSI%X7mbXylmtTs1A z`R4y!hpF#n!Hz7>YxE_0znZr?`j^T-R)Y9YNlftpDu3|cRnuRuZR!HmX>!%x02d_V)ZF>B!5odxg z-cOuie?Ng4uD+?sXeh}R?L$2hB)1C*d)@koDA(K^Xedf&?{8FVoE$sV!rFxYd|m4I zw9&wlZHNP9sn;;%W7T0VQPVLzfENXmaAB94Zyof~&6dj~Z$9~Z*1ryV z{+^3YI7kh{c7~jUP!J{3mrQ`CDe+;TQtXu`G-{k@T0(-*4wmgMRev_6s4UB%qG8ID zIj^yPDbl=0t9wg+c|`=y%A`aRdR`5?`(*)Gi(B|_+GgSR^!@b~y*>KJkA4XWO}W#u z{{E}N;_&-Z#X(F)&8K^teT+;7{QNOi6ciL-?UAE&@->&BP-jKw3ZYmOLFp+j%=dx< z%J7djOw!WQjLwJZvPuO5%8YQEXK-`l2=49c=SQ&p*_Sche1blY3m7i`ZXA*)2 zgdHsw5N`hHGA5;xj%D}=HPLrnFvoPwD-$Z+KXZrm0BfJzLy`B!NUaBhBdUW?0}PZ@ z!(F%ZhQ-5(T}Ybq(TcpF?Hy}Ko-!ktEr@HQS+7FJH9@a12GZKF(H$J+pJ7Xo{v26Y zh7H4UHUd0cj4A-Mu@Ayf&b5!U*d(O_y z6*Y^N{S<UZvu+vNDu+)paD;;spb*5ZUjwrI8 z#5x^NzYzfU$U1=J_kSgq=jQUWDbuR0!hz;=`<+!Vu<3M+iT3kcpM28I$Vhl`qpk8q zr~D9i#pn7;{}WHnn(-#i_*ZJz_(xu1*#B0u#V5S3qWx; z`8YYf)ou0EI8Ikm8Nve{7WB)<1^XvWGSd;zsaaXY&g}N-wqJ@60qtZ5Cp~=Do98qe zposvZX9Rw@Yq!;-1=L4Zw+zYP&#|8EBS&xCO0w>*F180Z`Vl27xHe&c&`$wEyw7k# z7X?E5C?cVIU6V!(qxFxx2~0Pk>AISd#X&eLc%s5F2$BxOef5Pk#~VjOZYBRE-kowI z-?VeAcy?-p4{5P?witZ^TefjN2?|ns(y2^A)YaA9I*gGlHo8Ii*vy3=FEti6i&BmR z2}n|woOnTni5(D0H1+G}gY$s<`iU3468!);(%d~Wfo8ZdX`0bP=Rb)I=APiI*%!%6 ze!Qs3L&0tPfeTuubd8d-p?bWOeoZa2V>$gIElu`X+fgzuLi1d*|5T>&N%-8_o(Q~b zu%#!Zm%6wmv06zeA=&~9OHxAvd1aTPY7r&^e&`)j(J z+S-O9)AsL>v$Zs+YUSEJ*c17{QX;s;=H4)(e@_Cz?$YXSzvvy@ZypQE@%|S8>>F{9 zTyS$|{z)d!LoOIOAb?*R4@$Fp+l(4DD}1fOTGF@G-jiMFX`B6fHb>jEauHt!XiQTb zyWHz)Ha(D3;v^ApBYq|PEz^tua`ZcSFp?>2CSUdm4{y98Sc8cyk_V2aBWtvx^722& zH9^pMKicc$7Fz=DEUHxNr6+a(4P4IfHMhu;9USS67OP(X=rGtDC$D$pMr^a4hekmG zLpr?Fx&BWF$Z4R&>(0JH&DS%kPy&rjIKU@*oYSJjLQ>XNeVGCK3oZMtU<#-3Bj2UQ zGI#?On4WBCa<1k(s?q9!4?xm{1|ajWUMy^Gs8Z|FyU(fUZ<5HEgdC}NKneIc|Eg{j z7QxA#CPPQy;pGKqnuSr`LWcHz=Y%7f8PopULg&;}?IM4Kb!f3Pb~Vk>;uZHsJ9}?PXo=T^iu;&My>osoU~En);Qb6HKeY z1VlwIF+cmuQi;InIVb*^=TBAY7Kx8g`1`?+?LTy4;9G)0i*O*f+PEx?;lx4r1-pp; z{wp}Vi_lh`3Mb%2q@bARu&OM=$H!m&V+doIm0fASF|s?_3M!dDIr9gK^q{MjDMp`W zwDn88x6YE_9gj{}cZ94&UGQ%V&LWR6ZCytcpUH+ii2nyOiB*)zGmpLqTXhY1BCum4{- zOl2f#a>Na~dS^l3Ylr3oIeuUPW5i!s09oJw(&Lltl4Q@3dL7DjKQr*cgLJs0rY@}sUsV^*)cV=k_Otq|&>&{64k+^7qIp;@N zx7rzD2RX(c1>|YKV}791s#)cUdqMWetpye(wf(=|G6@L@`T&ec;roUTj)uYIuEJJp zU84$HY~sjy>+j$5W9I{NeF%C!Ex0!)OWkq@)0rUdsmsw~H#->j-j?SA0k}5JPOJM9PU8w2y55chC9>k%< zd>p3O?oVLS<#cBKurrbxP+pD#Y)8tv+38RJl}x)+g`@it(~dWPMes)*5{ZIDFuM-; zwCaYwa0g?82LGME)f@rXfp3>X=WFbl0~<2w!2!1vgkgOticn!~!}khA=UQo^True> zoq>L%zqDyOdTHxXPG4ufBF>F2vDNTQ7IQ*}3IVuA*F-@UKyvw`((jrr`4tpgLXw6E z`+{l4k-$m}XNtuzHk0b!(fH9(%%j~?DKgE1T+EJP30>n9@rLFx14K$-i`U!; z3>XGpkICBF+AId9e~ZUW?A?5QJ?HIRsW6M$4E0Dl0y6!<$wtKbx*3ALxOYZgEs2Y`bn$A(|z|Y4J9~-y@6OIvHU)oU=XrHFwiwXYAR=p&K1n zXz_y!F&#xy@ZHuCAqTj3L$UANHNwr>t%9)J=EiUt>{fT z$tiWqcZl z4#G|B$TMXB6pKu9W5;Yl)5tE;_6QtA3MZQHq4k#AH``)RZ*TLqymqK*pZ(6hlr1_b<*l}_Sgbyox@YLuQ#f3pXAaEw~AEMFP2Z?Tw08@5H^WSdaZb>qVu$sH80Mt|C3=o6OS6-(`mO`;DfzUub|Rvp9T{D->KTin@n)l zQU;6eto!p-md!vD{dKunBi9NM3CaF+lsNpuUWjfBe@C6oLUe4b%GPXBflgE1Y=t-P z*QMqkY%AVKW}kqiJ2;eC|MH$tU5vqRtA*_+McQl65u68<2y5CP8l;>TcRcVU!S@xs z_2H>7u3>Si%@EA=3!@VBIc-;Dz~0?AfA&UjfyU*hPi@IUhnYV10l{XuxkEZ~yDXTS z8X_qmip*bHxQHL|YFM16xNq+Au`-9VvQFKA&4g`MQnZ`RzR=Z1Cg|F-a}mM{Y+TT{ zR^$HPr!hJb`lF!UDK;cJ8m%YtW2ajQkj+w+O60=s&XfZ_9r%Z10kU9sKPi#&7U3@# z*7S{)uMH+#%%=XgOK-k;sJ3iwZZ2wW%W%-FRG9|q&PwAw#aBM?Rhr@CBpq>_PX(qD zrdPDG*%k8P<|rUP-z=b9jS>?AbCk~YU5r|g!Y50m1&*V=EWjo+KO4t3rd}HC-zW=1SX`D5 zxKh$yv$Xxk`f5!SwB)d`OcBb$+!V}qY}uC@2?Mno}b|K&Gd;J938nDI95J?+xL&)xBYUNx}aX? zM1{+0p7BTmNrd|NFsGM6=?fNkRD|dvPR!Dcjx-L~_4=doS@gufDbmp0J`ij=w7MwN z0Yf+Ei_WLRrz*N6EAfTudsXz3Fz$^HZVM?g3BoK3y3Cg9=46BO=q17?#KCt(2P2Ac~cE6zsL+$DBOs+wwI9@U*eQAE7FLKa@RD~Q8}CF*NI0DVzamr#r?N&?yT@phvTJR4;Z zyVEh|7e34V>r`&_dONg5&Dx$U2J8)B3Qp-=^#j!KtHI*5LjKi*)EW5B>jDl@Bp{WA zEb))Q^QDV=cZvVnL5#ABkT{)M7$N^7p~ua~>B*&Q$VWV9-|vIel2b+BX6RPyzNwT> z2Oyd2$hl0F2VlHz#GO+5AUVX=)caei*|jsJ0z$v(3sYgsz>IzLYEx3I=!>nu|{Yz}MpT5R;T zkG^2>*1Ch~WJcSEvhs?jI1UlVXHm%O)FI|?IHFRLbRDhLi4>&*CbkhLX-A<;H20Z8 zNMe2Gln~N{n-Li4$n81L+cQKnf{U^mlBx*KslRO*a3Re1*1pr(UjB#~=efov0e=Q^ z``;hKP5iMXbUK_>xYS-lL-SRSr`O3)EEI0=_V(tRe!RpWA*~pib^c*Q$TG zI!n{kvscEl?g*8po=sm~b6#{49ct`_A$Z@|Tlzlt{1LpOwGZ7!LYnv3UTIx+o0uer zfCzN@*4sA%x0a7hh+eB;lnc>wdDfMA^FV5B;KJ(Sh&eNJ{9&J2M8N)uX--$x?fa(}#_ z!ETL27Tlq5>Gm!5ryV*2y?SsOuLqc1|NKlzq1F0I1s030^~h}4nyPN6`#sd!t|ivL ziFEM^QVH;UkVKEJnav=UFnRxbZSKTByLY>2;7Rt@_^VltKaVfe$^FKV#nI|aCYAO6 zU4)wz1G(wj>mKZjCZe+i;@}r!i1%_fLCACs6#NL48fq+3Nm&i4I-&na&yR12^HyZd zNXDeEhb!w8^|yb%=e*d`Kh)X^;_CF;uQ85`eY3kXjT4q%BeecU2(7vv<-UgF>yb@^ z#8}3h3p>)Ma#bI*JmtsF^@c0d{54J-Bc>m~lS$-wc)X~1o^g5O1m=eVb1vtj>9$980f8SmN^HZ!Jtr;?C#Ju&5fKqjC+2HEFxsI~$R&mzE%=Cn z#iA0HXhP!R@YMYS-weN&mAO6~#hOnQsg&+4{5I+2@`5{VI)zPIRv#$D&4T@YApLXG zIqhG&T-#E|V)RXNBc`8*7S-xPCY2{QYxl43*OcX>>z3|JzZApls7m1rHOMI^l`{%* zz^)ESWo64TVGAfRI2z9Rg^YkEsCjm^wI8O`JiABm<#};U$KJXMT*p{~W?{<4h>x4!=r)rP2#n3>k_8%FN zY4>%;E?8=}Ws9~p;&+qB7L+vJ+&EysS-CdOX6iVK)!aA>r#sWzxzw?ou`ou?N~JuR zbobEQx)nb1FUa!A*sb#VNPB*Q+_6m(gZc>?Og|(-S=+Pd z7!gCsq?KIE=wS7Ld(@p(QP12Q&g<5j=7x*WS}W|9-e)!y78^|nAYcd_ijEEr4V~sP z-Jhhgvu8SnC9lFF4n!h)Q5!)SJGU1L2rK52rp^>E^Y+GRSJ z@T0+T`_*R=92O>|uFeVeXy_i){&q9V807Xtc^`Xjp73pKi|)yNAi?is71$sgN7ocCC{?*2af^_O-Nd(yZhEwWSxO4E=>+h?hXE$>fcp6v2-rIcSEMEb96Mpvv#$RfK9Pk4(?);Opl?QxM_3m_ChUPisX=2?8;qlK zT?@d5IRiqXu)3GQw%nW?eXt*U79S_1qa(@I5YU?}+at+Q3fZF5^VWSMBVxwJWZv2> zuoe~;!I7cDFV9aAMK%}P;1jR@YKuz=7l498SpO8+ zn++C1f393yL>0Y;so03;l`QtrCo<3BN-jO zCuFwax+qUdliP1`0x?)?Y04+pJL$Gtuw`~zCt=4@AisATNc^I$76~l;eY!Hdg;y>P z+=!G%rDu1K^uZd7cxmt1r@-P;;d3QZq{^il>?37mGG~X?BdfDxq~O*nQqTZe$s?OA zWcfs|Jk7?lkRtkZKoR`=bE?O+vu{|5zg@4EuOQrJ$ zDtvDv0F=kB@W0CxrP&mc+%(eXwt>O%9;=UPe&7_df0F>uCL)rWTNM=v5fPJjG%WV3oF460zZ04M^Kd=Q5Kw>G zK;d+}$9#U6w{pk({9>w0@V`AaOd_9oma#Ak=zTgCx|QPniO!6Fptl#&_mrHS`iC@)aAAIO z>$OZ$Bj1@B=wvn>#>d29P{^cEx|fZP$_os3&o#)#e40w+F`>S{yEnK>V*58z?mePr zlxJyZWK?N4M&fihi32vXme(Q}Q#z)ljpY{=A-27=VhjA0Yo8fGN%y|Tsj8B0WB&KL zFCjD(F*TvsN(s2CdseMn-P{cR`eNI!yYh5&P8)3gL#s{89#w58r-KdcH_W!8AaSb@ z5UMH~f8*H76Be`Rv}~PPpAw}(m@XRd`;WC!#B4g#;%AoBth@CcW2Jba#*{1vo`)qE zkW(mCBp+|iBHq4JwQi=hKo+|DX4jn-+dBJD$3Stv0*8ka?^#o=p#SBQ8ZCl()Qajo z39mIYd+R)s5-e*_w%>8rpj6bKA59qXCZr@Jzrv`c>YL{P@=exP%f+mSij?r4X#UFO zXgOkXQW>bt4Cku0b|)K?9+&s@+7KvFNjH_X>xyQ= zreW`Jf2B6operr&Tg2%Vu{+04gfi{5Kx4)y&3s@~_%;Z-Ca~~GR@)*$281g!TBBMD z_t`(YEv#|d_U9o64pbj1xpSUC+|jvrc)EK5H2lcjW*480%+*|G7lI!ur+PafjUHSL z&we}KZk4vyW3a#RP`g_LO$%c|7~Y{x@yO1)dDx5WR~k!R5KKAgAkQ8m#Xz5Bv=fav zf(=dC74j~MVvzdX=UZ7@!Hcxk5F(#c647KAkTvUtgSKfq#cE))cN2kjhPc#Cwn$ z7Mx>XwEw2SzA;8CRN^G9tJURkwPbx^6o0XQQh%|3;~zC8%QvbB0yy*V>aRZ3y2*>k zbiDY|I*1UfVISYwx^JiJBFXsbiK#hR&vi}avf^&Vj<0N~<-(*rU-PW<5y%@E34R^Y z{&;$sUHbYXuc#V;p>}S^-T)y{C?Y;Y{WrB)5i?#nBc}v$S`~42o>Je;2!iht(mKlZ6=MkYN631_KmFV{VUNXsXugb(1+^N~Qf5}qV z_b-|hl>qGr61G!(iJHe-R5lc}kg%2Tm_F@#mEd-{Vf_KT76YT9@*J5x)jU|z_#RU7 zum`CGsAB=6l(szc*4wBvJl)VE&?!ASkaSL(h!@E#{dj#7Yd248$Ajc)n?$|P?;yx> z-y8gm!ajR)Tr%!6qlM$9dAq+JC}3J87Lgi(6*uCETHVHJwXX>JBV1OMIy<-ORid+e zGq5S-=TAGu*Th^{;3gE=iV?w`FRz{bG|`1g;}30UPWc7}Qj6iC9uU~a_^=<<)ArDzF3|!a?fvl8NC&=W`_O(rIyA8qOJll?8WNeac>3v-( z48vK1flYoAZNH`8iMC*kaDN|ye_-iBT8j5oW-({yf z4C;1`h0^Wy!6$cmLPEmk^Yek%>dgOC0}Jl#EV-Ty!^U{czPI;xMr&CjzI(ww$?S9x z9zHMcKn3?JRLai)Z3tNK@_USpy=yOV|5e~MpjPrFDy^krH#c6`M%wG{YNnuM{E6pe zZ%<=mq`7R`c9tmEBI(+HdLB%T!ej*O=KnUcBJ)U3V=_j1DXsnu1@ht-I-Vc;c_k`5KFAB6cIuryKafq3moiQZi$@^$o+bajCG;ED@xZ zUa&%dh?yCYR4k$+IGPj<2S;T?mkod^f3eejA~ArXKDD_pQnOT4S~^@|hZP!FT4tNM z(2aU|1A_>0B1cERQPR_w&9Kdsy?f2EZw|fY zOYNy>hoT;Ja2+3JGeLw55O6K4S3xg%Ty|N#c(uru+Z!5^Fdr{tb>*sO*#as2zrn%D z5S4j$kwgqz3KC`)>(QTcvtHB~G0QUF8H9oaF0SP)G9;>nHGiQ3lnQi(PZ~KNqDT|7%sJs=Ah$*Z* z`T%jK{PLNX_~^!2J4P&=yNEw)4bHZRY4_Va)Oek+JTIg>&)j*MZ!RqxakJw;_NHpH zTUbt1mm=jMTYueWe$5-0D$XTD6y4+UV1Wjw<90YvtLL4=m?O>rrV<-Az4qjTJF7GB z*nZ%0@K@Nu=OfY1VxW|N+)D&Ej)84c@~CP}520yc!Ck$u?-En9eYOo(eWHlZR5QT` zm9Np%2SXkF{pDN9e!LlG=}A`}j=I`Iu3F92fsY)Jp>##YQs)L@W&g?1K#3Ur>enQ7o>MHx*%MKvq zD~)GGZlaqT(_#8Z&Yq0crtt%$a!q&X>qsWMe@cQf79-nez3#5${864xz zqt6uplQhw)UyLjNeNmwl@h@p97dYwj_!s1Bolh)a*!IQ~W5;|LHZ^Fs>a}|o{ZS|t zEi9P_i^32hG|1%kV#9njp6-+P-r%xoV=*T0ed&pk!E?dG|HO1gf1KI*mr_;I&!06> z)7h-@b{o3ZH#YphWwNV^t4wk_F`urfylVq)?0BQ z9QgW8CNDNLJ9{*rn`YW>xiqd*whu)EVTD$LJA3>r^5{jBxg*W=U%wRlo$f{7U)i)M zd8}B?>I8RbX{wHlnW(kfEgq$K!)e|0apYl1Jf(O6VPWI35-DZ_Jtq;=ctf{pI;}r~ z*<-t1n5wGk!1R^1^Q+^(6GN#>k?C{uov0qe=g*?2?x>?33wT07xUK0@uTjiW4Q)?_ z>jOev_-om**(IWf+;27ukkv_k!GiF(=3DaqxUnMpMOC0vmt72z|F|{aZ+Y+evA5-E zN-TQ<@1odsbAH*@#%MSG+(i=iHw*G@Pd8*p!j!Hf>j7O{nznlUi?+raZRVG=lb?!t zurkp-p4UiCpgB^o?Izt9Z!DBz(jpjkcHKK;&!hJPSL9|DRz<-Z0*0N<(v3>!>2g9- zVDOI~|Ja52(TWn=#rCiW$T;Dx$nhM&Nfx3{i5a-^w%%!uS>SMNEPHKhi`-NL*g4?W zM!@TlzvK}n`v_hS$svDy0AE<7e%RnZzk1Q&qoVZ7Ddzi5R*LH-Q#hYzb zsS_-03-&xvE$;~gcb72%Ci7{*@FeS|gEW|vC*Zvy57%g%6WXRcH{^cnaoG)+qOwM_!+nncrGz?24> z07?016R=gZ2VA5X{`nIN3_IG;2RjeX2lXYStCuT zdQvUPXtA%^GaaO}1U@s9xu|^|J(53mdg^}h+DhgH${0ay7So&#x?nRNMyTUA{BwaoUn5xyfZvXj+joY{vP zWWC7(*`Nq1Xc1anWzYNh9BfknB`_?FhKENG)zR5OaD-q%$70^HhGM92^|cJ$Dx{%maKZXn{Ke|SIa8#60>Sac88SfwmQ)AB}H_J(NsF7EoW$B5{}z)7LEo>xdS=bHoXbhU>Jxu34;4 zt1tUZ!h}*{HdwW-a;(R^U6Pzdl;{p<=-8Ef=7l^?RQC zea;6z2%K~Nd+(V&v(}m!shT58T)-muC5G`Cqg;p`|6~}gG{TxaeM(jg_(iod<9W>) z6JbeTa~X5AOz4pQ{U#qE%2~Z(!6yqdQ?6F0&u#5$IGiM^8tl{}>bdl~fzPbvyaG3D zfqSGzFihp@PqOGwh8JG}A|Q>#fc={!cB#b#&G~57AM6;_8)o#54k23y2doxSrGcTL zK%k?Nlxj%57Z^%qAwi@P+fr+Os3YeDO5yB;4{XZnNwyM=1|t+%TNIQ#mEgRVOCnkF zcoL0@k7JzMO3|l}O}!i-=@Tu6^^R-{bIC4STZnk3l=%LWVqQ{uVZp@OUK+T6=jDz5 zB(7B-^j%weuxfhHoP2OWL*Co;&0JhqIkcqKOmEJz@6ze-j_%UFcjm#`vYGO_t$Hsd zKDt{ZW8AuNAET|Q5GYr#Cw@&Ew;6uyTN^KJ(UC0ZF8hLi!5&56A;Irdvd$Q+ z!>&|vwu#||;7MW-4`|%WsMGi|gsujv=w>@6Jv|al;1+?*`y2y^{DL*AjSYUSbYx8% z(<0$Ehs;)Ih&W0kgV~}~G&Fq^uaZ-1YdHXLZZN@3jfDxrVwm`WtqTH1Md3YOW!W9j zK`sVTBKC=o%F1RKRa~%pXgLN;zwS=P*3kgm?O!;6DPt6m3w-99e^T+qtwD4_=JxMS zjHpZ8C+kMg3|nTp$&Pn&86Y3tw|uYy59!b7V1Ji2Q1R3_cKI*K{Laj!n)7(qx!8v) zLtOF~O7|dAf3T@k1$OmCicUdWG4x$S?ho&L{OO}2yN5_PJZs#w&Y@=^wMOz!k!#D) zYH1Vn10LlNnxmVHX{|VotHRdPVvu+Y6V(~TL}hWntovI3N+w`m#y78|=n@NZid6ek z*DH#~9v0Sjc0w_zf*>AFc%)}n#v{8~LaU%Es$JEgsprh)a3M79ol6!FOd%j5cb)Hy zukOw%pYv>N?(c_lSDP4u5n3NUybTSxz_`BIB6&ko**ubM080GA6=Io+RZIOY_1bJ| zjxT$@3q2PtLsqZ1P9x8AJ`0>`TwN-Wp7;vR8j7q&Anx*`I~L@k?S1&R+F)0@GA-1~ zG~Sh15jMxpiIRq6mUl7pQ-8i#+4mXcdn$yUv zX_l_3RJ+iHOjBZCODXXH=eyBun z?LEz~&llU5I|vp=B(I;JGK3FZ7Ll=HY3cvp?)& z$vHhPEi3y+E6u9YuPXj=s^>G`GvSJ}B*V51cS86RBCShP(chN9K7->FXHz@NC<4}H zuslm|$?Hlqzkc*RC)H&e^C33Bn#35@jK*W>`Bt^v>trdUZ&(e~__uu9w0rCy-kT1Z zfU|Hgq;_&LwFja4%>2I@0%Si-9ZX}8;Q=t#d0MMqNa2Z>sD7w;kTG`!ty4kc}_^u4yKvDmzO8c zgN13Ioz*zM-I!9(H|KHOhVt?8@sAR4JAG+?b_#Q{!!$TMt*jQW?_l{k> z!O&vV0VA3hJiXZJ{gCiI7yApFfLHqJTxj7}Eof1fm%>tLXJ%7zYNmGdH1Gnw%cAF_ z?|xN$_ks`kb9tV9mGY@CXQbZ2J+Bf8e@1)ClZ$PlYBM$_uLN=LGT&hFQF&n+OwhSc z(cf*~Jl1eB{@)Rdv8zboHp2=VCZ7YrewGq1NNMdSLISc$a3OW^zkXC5BGY8 zw3D1%5-EJ;lWUJ@{R~LW||k7i`p$=rx9?Jbx*TQQjALGhvrexX$#EXtLbiC97U&9 zhkcG1Ue*fBzz)C0TRH9~CT{-fe+{k$%~t?Xo%Pz%#o8CZ!XO1{y0`iSFSYE;kDcpL zNNX;QULTK_NWMs-G&9osW)*d=5J~g69EN{y7X;!g0zgmp#93Yvt|><-76Oe>Z-jYS zjp?jn#gnw7^2^(+BPMezkPW(CV=Q_l7h%`^+P);MQB7!wW5%%a3nFY7pFXp@b?4__ zL{-;JBnv~<@R z*HZg@v8w)9S7;L7orL4=L?P-(`~AH`k@0$uOo%#}uf=p(N@IyT0he`&!ccPkk|v|+ zFr>8ld=vTm6QB0lT<{P9B~tGT!Ys`hO*-4Qe9R?l)MMMqz@}Id0Bd%33?p80s#a9j z`l%wt#i?Y~Xd}sJygL0tXUkQN?Q$k*OMSJJD146=QSgWjHSEcak5>2fYPh8q8dr_&4%uYu36n_F=AUFkq1y?Az{N>`!nx89aF%aL}tCXBD^s zhWdAh!Aykh4EgjMKUrn%46&`edql+TVS-q<9z7nckh`t0~&oCXFLt!HL=%N zO_LHv9AY+WptXLnkB@?2h5V`CDT+kha&e~*3+xVLf6l^x{-qdku=mOXaB8i~USUJY zVuyB5cb}|4=eUMH_j73GBD6&{ABL>)rAz>Hgz+)Efx#5~4EY78>M}6_O~~TB`r`3s zxRXR4glq#-Yy%S$@is>?qJUN=AXxn4UY!+(?j9&;ed}>auUeuW+80Z$Kb*>KI$c-V zQJcgDyyNxV9TgWBT6Af`OXnLz?9)XWdF*zep*hrd&Y z2(sV=A4w8`v)(oBxaO?dQchGgxJcKk+In@SZ<5_!wS(55eszBFY}Nsw*cg4H@lNXK z9_ORtklYYL8#(zURT34yGbX|A5{n=%R4UKNAZxwZw75@p#js(}`2tT`aC4OiiWmZd z%6_hNyk}lL>BS%+u~L@V9GtABNq65BcjWi~K@>zmw~o0sG} zN7Gr6sniV|&D1u9Hx{xGnM}i*qW9acu&@At;pZpq>+9pGqzzg=U&m#wukH?q6Td z+W?ZX)6Lygtl=Rzq=dD?g&uc%Vk0%ftf=tyxZe5rA90cg2a3P zD+7oF2CnSar}v&JILDL2f9B9EbJAUZydt(Fx)cuuSM~9!$j!0`Km!~!_`n00R}kA{ zeaxL)q%I4r=L$l_@Szl3{v#A>p_k36sx@ug>Oac71uZYkkxrBeAh5U@S987rWE_BN`)V z_d>|Q#A4*^G7te`kMQ3iN0RXQ4W)4EgI-Ow=~zTWVJ7KbxQnE_kuFPacwiX0*ao}F zCZ~$w{;4qwOXt<({;b>=mEq+H^V+4{qi~(9sE|Rtze{|XPBc!)IdxhO&HpsZ%2~~x ztMOiI<>zb~p>}M~9HM%C#XC|{<7*v9gE^N36hg>4Ct0%7R4_>3b(svO(zuru{CXo) zBE92}m|Nd5T`{^4ly)0LPHOrG@Aiq^^ta&s_0KDaJPMb|o8)TQ$0wo}^vqdLv1t<( z&=VL;V!;BPV2d2A9Sl*GI6$;32GAB{{>PP$pKoX}8O4d2or;o-prPt4XP-rgWnRo~&o&d=E; z9v8CgiQ5LRNFn^LbY!wPY-KMg5j>Zg+Ni^Sq626#o%it!sp$krEk{wZ3@J&CaqgA1svj3S)022A8v4vvD;#>v5sNZlim)HQMBI1X`)I z2_Er#jn>-;fWEL>zxvJbm1ZCUhBYK6a>#>QFMMV(>}l^2`?mZdUh)+f#%(#ljfcgA zXwV_l0eQ4)laaNtT&e%~32zAIGOq6*6cRF+5E1`uB(l&AONQpFn;z%{q8yBgN_{Lk{yb_Qh>dukIoaJC_j63Gt4s&n>f>PR*= z$i$`#%3&0pRFp6*5l!U^f1mDC@f8y(DJf7xLd(8RZNCk%4JYL&nsOMkUhWYm^9c_I z9WX!xCfk*E=)T?9SWv+EwZp&C_#*196RS`R0Fh&<-{-P=YOJg2J(QDAWxj_$KU|a= ztb&5l*YAA69PuuNO#}ty?>Vc>LpF^}AVmecW!{UTZ1*`+*3t^w^`w&X?bF4_L4w2Q z7DzWaEIGyRBE4qF9^Qqv)daC9R!iD$8`McyfC-Rbt7!Ks$T>}hiAT@={MlUF%5Xtg zGj~}}2vRgcN;FJ)=VG0<$2tXA$qMHKISApc>$QPXb6n=N9IeyjVz^l%cztu#s|NZX zrKS=CSCk$c9Q;y=qeu2V=tH1_?m?-3ze4~}ric{I7wd;(9PpvP*y;aRU;%>-#|=;P zaerN3K&*cUL4#rCRmJAYjk7s1H7#7?)e$R?x5R!wltC83)}X91rHY zSJqt)<^tCYYRUP{#=3Ym$|XL1iX&IuG+hApPVc`_Dj*C*E1kc~4!2J}hwZzm9W?~5 zjY-a)aVqntOO_z+etrdgP_g=vaEk0l#1E+k=8MlUAW};wnnxVrokNrv%5lqKEEV|$ zfms2ZE%Ne3Z}`J+VI)}W&#FkJ!qD-Gp+J?KDU~>E>+I|sR?XJvc4ySxdltj_OU*QR#xgkTOLu-K%p(7cYJ4~y<|uRY1G8ZT7cohRQJ+OYx${E1 zMW)ZUMu5gpQjX3PjDPPB4fcA}n2FmW^lEKu6A+6c4IIrDBj9}n`MS~>{O_q%jW#|v zp?R6w>WZomKoSygryjv-)pvo$i_6E5l3EBKtK2fgb-sFdbm~O9q|Y1W=fU2}1->fQf{`Ml`K` zN|9&%E>~@|r)oLdh;uMsFK%m#o+q13+4nMJ0XeNGnb)kU1N^?LVPA@0Vl7}B{*%RM zgLh5d@`wU5VaVmm`VNWI!fJ3x52E2AI;FPy^X-ilb4|*-AZG`7DAU^ZQfZX3T)g#L z9h99RmY~e!EULDWiu+t^$ZE8lgop?UsJvicq`L>0T5{?Y zAi;>9_l+nz(L{YqbgV5rB5mTefeP63K1f1}N?Brl7cXk5Z_FSc5Fgd5ou%&|eLq5QK zL_|fA*1AdkA%xwg@82b%(`CF&V#x{Ick>ZQ3k|DBG#Zg=#76ucpNLu79OpVS(f#X> zy(SC)viIU&x*20KIf4gexZd!io}3jIl!m; zwADf46kBlV{Qf}f`XmtV`0mKV?*7^iD9uM#&VWCIg#;~1Amn8?ij>i~VMC&9V63c6a=@664dAblS0&R8EuFko^I;N7enmB-kf@Kvz&wR%g~!cit;p4WwUb+e2Sw48-s;jV8W}!Em7&`OjX3 zvc4mgQJPY_`vH`80L&sMCx-%ZhQbp~Mn*;-E~`8lBq*r;xfY^mpk&#qUp`NF06KNg zhkFbXoWPP2>72zW9nI4IerUq_RyYAN;Ff?f!$MS8{^b<;fZ5((Zqq}b{;}&etXlW` z$KCt&Lo}ixtGC9ajrG%!b+<;&fPkT#Di`m%y>Q*m3`Qp=2GyR_!aE<+?|39Bz;uwr za&3%#0XA{JS4V)pjZRH1!78q@7Ywx^gMer^U!QP|z=UUW7!->apvl?nnRliCINQs% z>`-oXLc6|yA9J8IgfN8-(23nA*KbR-8?vT0rJW#KNkL%&9_59AfIv$xHkc3br$FI) zdtDADs&MflLy5%b@P)b=kdc${I0_yuZ8lI#xdt3xs5RXPTPU4<5)T|By19}Q7pr&q zx@=F_AHP()3D6;8UAGMt$D^g^HuM^PU=G-HgSAu@NX&#B@<4&T7(=x28?SMBa~Ge{ zGxTV;f8sU2_-C&A+7`2Cc}9ukyCK&pNtly=oSkWmz3ky|R5brNjh|{>yLbmmj^w<6 z3Mb^oJh7`(Z?NxPmWrBG1ES!{SFZ_26{2nJ?Z-R@cgFKGAEw3WYVXLiPYYPlUKq&n zp9CmOe^qjIO#(PHm!||*X*?e|lwT)Toj%q2+~_)p>uarZ1MM6FicauTTIm$RbfoOlpW{?eY^%J3ggTXZM$*vS<|c%gv=q(l<-S4Ycaz3b~mX?f5!zaPt` zl;(2MK!7=4WYbaiQinQEnU=+AH?A>(t`N-p#c610l-fx63!*MsyVJQ?2HxM9tXfY) z)*rE-Y)iP)gVV2aU#Gzdppp?=V8=E7P8UBpy&^U&1lFBvWd* zb|J1H^sg&GLh2D9_ZX&>0R?F?(R@rCy045>lJ1uzQY9Ff|I&#fV%4-GqT^bfMzyJ_ zsmDOKycVCRm(UCc`u19ehEC1DRd|Cfe{aJ_Yxr6MN-*9@89jyFF6$*xM;HY?y*9d% z2R;`|P80-Kjq3Qd`vYI&09WW>4o_2bNK1WdYs(M_TK|?Z$fWxLVs5et)!}$UO%KTc z@W>xd(-DxS&(7FS|K}Swv>xdEZi_A6cYA-CM_K-(`SN+F2t*;6OqS6D^vM6ZFzacb z&nmfM=uh`&Bg|HspG#^zPj0p*rR(3w=T?9W-NwH>w}96Fy|o`XW4EHJ!3Q8Y%lsMa zWT1kmWx8-1`Ypd%g6K~@qOe##7qlsb`g>Uj+{1gdaJD^HOSGh0iwIKQtf`lYkfi4J zV$aXjR{raD1L&7Wo5WvKrJC6_$$Q05NofZt4-t{q^(!nl`6jf*HP@SoL{(e4J%xfg zzAuVpKTh`{|NE7J*Zo+GakzL5lvl^w+oP`w5Y!tCV1aSbhtNU2p`C!!6Ne-yfO)P5 zsQc$&Qul(^SCW+MK)9m1HV3as_fF!J`%eb^_x6^Pmp=(PxEmU-51WogN2bxn^W=I# z54%@|GPFRkh}Y$Qbr=X@MS!|MU`?f_yRh`&kU^}!nTKL2Z@lZm6aVa)HQ;Vjk~^E8 zLb?*tmHb8rBG-R|@i71;i{7wrpwXU#faq297OEuRG<1oGcl7m1P?rJy@Xj!!e|dI4 z4}A#eF;KsBAz}2h2gNUG?tSCXAChX+hjqCtLJrU#hJQ)B3Z_(Rx^-&^NO6xd^3%nx zNcm1ccTw_#x{6T~Yv%*p!)k2oH;?Divet~=k8Z)_WtaH$0Iy+{vxLNF5_|$>93`dL zAWd4^3aa&em7E`|cE+-OVffaIZy5*&K(sZP>?8qa+3#e-X=iWWxs~B#ob}}~12TiG zOr0VGz+?eV8qT0n2CzL=5{-uqk&)o`$ui~mvI9~kaxN}8YSqKv#2d6^5~s7cuYTsS zD^YL$`4h16U6A)~pY5&lIRdB6T!7tr&!l_l;GneU&7|5kn8jcW3#WgT&KEPGt+$G? zr=VN*PGJN5+2_xNAeE^Qnz5vFaz~GMK4pTI70K&>Lji(RX(e$j-kT3nvuC6-gF>Au z-ukj*h)+~FR0%y43{4aNd7QAlA$cK7(D%UB&W=ThLl~IKw$5&e#BF(PdNG90k^wNi zWUgY|TvwhA+YKOkV>ZUGZb3M$vo!)4%NQl#83h?RcQO5hM3ym^BI3$!90qjJ zE9-LnLSjKT^sx5_^~(qb&`RB)kfEK2Z(y=;5&lC=*uTew)j|CFd+3-L=$`1{9`sVV zps+nQBdyz~l^;z;Bff9|T*j0|Tv`#f*;fSxrsroDKX*ASzGm3mrevs=p&t@t_46sL z>#_ryL7Dr+?;5M4BWvn)!rpYO-Tn-VP;*yp)XN)e9P9X-0iOry#8940Qd>bRHw0vW~K- zW<0y@rze35fs!>qXLZAzOiD%u!Ul~NI^fZ3*L<)!6J!L{vcVY{8RXtJ{vHo;+%No+ zlp!vVR~RTq%;vEE+9r)d6p{fb{{z6V6+ivpM;NxiCf1r^DllR7qU2UgGf&#i$<+Z zq|mTQGb#)OtZ{|VuR-E~i%uQ_+(_xAYj4SOpz#6EVFam~N{UPAduRM2kqZeq)o6l) zmzTG~bX53d>RVr@%uIa#`)JJ(3E)NH$-F}#I7su&QwQ*<5&aruZAXjLA+V}!EXrgc zX}!KsTgCMJ3r3F#dLuH6!@DZupwDN;uhJ$vUhmVWp&C#O;>xt^l(HspHhmH!3k?@tH=a zx5>88m|AKOhEk^aRnGRx+YD~c2_V;0>(e8=1d&gszJ9@*>6VkhzP=Z+)H0ZS)0@9O z2$f6}Qqdl0|4k$!Aopv`;!iZUl}yfI;GF;?fB1qj8bE>&SqmD!6BJPCLMJMQN$bSq zAWq<1f7)|$bl)Tg$nRgo8=?qMMz2qPR1 z7c{7iRSJD0G+n78Xtmywup0G$>N77cN8lUK2YhA>eTL-7`CvG~xM+hjpe;`N2bk7B zb-oA)DCwq(n&4N71$|lLZQ3Ga)0$Rpw)6z=?N(1ME-oHimXQn$__lnIwD4Ys6!QIO zCQvZUX-~p0I|u1O)!d^oS@`}Ajm2yK_XK4s?C;vt z(FN?UD_(k3LJ7LN^MKg8wOqUAI{H#gHpKu-vC z74`%Z^9EB3o0PS4Bd}N-TdB-R0rCL|BuYvRr%N+R2xT-y_QA+OOiU9Bp6Qd}3f)?6;(|80F6r8S!vWJ&u!%&~W=B2HHW2@l+_k&C2Y?rQlWugxT%tpl` z^}b%!9BBaU$P*a7kQSS++NGG1k`UytQ>;WdCmu6_o_lZPqSwu^{{s% zo;TfFfL)PnIg`qK-z)3)U{W>5Anb-^M)>+xH^Zjw0WL}|iCm&}7gVlM(eo0ga9Z^M z(H06%K4`p-fQr}&rfp;@6E3wkwmA`XJhCbBZiR;`MdN3cM*WT0v_$quSN)m2?39^X+mkuia;u6=^@>&P~!zB^YRF2|=w9kc7{8P*#sCg1`VrH|Vam z+{pl7*>)$Luo9;P=F^AZz^g|IJYN6&zD`0y!U7Z$gUNhEX#Ce7BYJ}Zf(-g%0CB3w zx5d0lg`C2m^?E(rN5{luVa4upUmeV&nbq6ub=l7iiWf?8K`v#ZkC00_ zggyws_|~${@^cy;OP5Pe+%p;-bCSMe_6(B!w3#%;B4%zl>_#eYCgQTkPU~7AVTSqF zKS@P}W`1G{g+kS5PdKSm-D1ZEA3!(ZpHawoT}O_0f-w&!*zw(_&fb;e)@9`*-#9D| z4@eAGNVLIrBP8+Q$noF6%+)kpd0Hv&F+ib? z1}>2jo*-DePX%9S8CXxH{z|Vwj470x_6|`~R!nH14^D1UyE!Q&FbsFnq9|{$kOWFF z8H>qv5CE3+DQHmWq?smcZd`g2-`JqO_ebJ%!J!g=tScX>-J1sEPc@+s84e$8P+GnL zn59Iw8V=N^`2zmd&)>hoX@IlC4jh+bTRs7~C};?|GtddSKmU34NvtE=1}f&jA3#BMKRsqV6ZE|jnZbM6*}AP5vDMq%O~J@0dt~^Jo$lWpa0zMmXHa8k zz(Mlje_p>{(ke52U8Y5V#W8>TCnMN!3VOzT%$zqLXl26im=GhG)anBMUcTURPD@Q? zHd_-pNe>SJv(Li;E1jm^@ZKTrU0uw}44u_i>WN!BUD`S+Yn8n{5;5hipmrMdA6~9j zta6$e+XKa4#f_1eEeb3${N5Mg2fR^pSSl{COd%ma*Ba`8r##CO28s;mks#^KKd(=U znndw$lsGEwI*l4>trkaL8kUpuTTDqSWcVkYGumvjs8@Lwm1O(Plq6S!7147~L~?j~ z+UP8@)KS=ez(;H$^MAiYP*4?#m}g$|l+t)ZU6_6bfzQLo*+gJ~2Ke7kGS1;w;_$PW zZOj^LrHON+hK+(9W*ylW0%caVfcj5UkMG0 zrqkQHT?DE~9EN}WYCmd2N}T?ikb)iin~?rz$1uXvibgf*^p%R5n&Ti9tYl9~#2bWG zKz{Mtl%1#2K6vwu+RcZUkydhysSP(C7PaX-d^Y27$kTwF*Kaz1uo8tfZV68BXW4Pp z(iSgJ!z!5H=U3RSo=b;1aQ%Bq{`Y6vJ@ToH{~0c?pc#3%JLxpe&KzSSVRh({<{n^| zbOp8D5b;Bm=WPNP5+dtJiwV?9ek}#abG<$*Ov@YXCF3I^7dgmqj9#57d*G`vfo2&0 zYg4*!uaqO+cW5ZjHD>3SsX@XR+xu8Ketkb$i$ow$aM&8&`B$JI!C!p(>@9XGUYGwf z6NnXnqY);R$OwL+gcy0wXOjs8LT}E75!MvxZR!AM`8B!lU5kp@Ja+DI8YCc10M)C& zQ~rIKqXYAl&uOe5Z88k9J&L06hnK3tXvUw~O-3F4ap6DJFB{`ow688?2}%}??{2qK z#72MI5ICWzOtA=AZvW1V;WcR)m&ZJOB_fj0*FORK?>WN=9b!5A3U)Fl0Dl6A%{`HOM?-NYcm%Oo))#YJ z0)kf|@!WM{fn!=Ro|iXU`Z@{)SZAR2A_U{-t3EZoQ5F_Ib+cIK0>@+aYr;#|Q1@jl zD)Gny7q2H=TwKQgRU&!rv%lz~jy-(~e|*H~a{lb1IkNce%VcGqMLz^V)#k+(_(L7BLkSc(A z!=|wfWC>k-wS5fx@;eh!2Zj@E z)Mc!5Hy>>3T#j_H@j$F8r-TY>WaW^BLdV1T@i={LZf zIP)t|IJ}bBE>L*w={2L84P)VmTzAz43VPjcl4ozV4*5lnwkQJF8L%NEG5%cy%-_LpO1C6niWb<3DLgg z&mXpHFcY`;D2I@+QPVCVbq zB@VO7?b@zj)4_POh|1vR<9nVjmtkBppzU|z&G>)bGQm=^j1{rNqs}^l;(ZW4*e9#y*0fR8jo%nf zb%)^C)?HHuII-q(Dz);@*FE%u9XfuWR$D#STR|hiG2>xymM|2~ne3qVhF-*70FNTa zEDH)UJ>WlwfkmpM*d$MuMObd4T7UhuSju30o587NVXO4bt>xSx=J9W4og@mMO+D|~ z9$;uES9dS}&(ih&V>$T1a#DIU zt<|*>Zyx&hbIr-QNzE2MOT#8=T_rzH7aT^C4=-jroB1~g%hL5dv@+Iu#j?4$x4lnBVJkCp&xjbo>#l32aX=^c$z@VMweMFQq zHqdjAoSQp&RCjeu?(gBT`tQTjeR*Ppu=h#QD!o+8@HhF8sy4pl{iUmzR{RgF-I5!P zApQen4T#T1jhDOcm)8M19Y zMsRVT%JK+^Uj`&`N*TI*{&(ZS5pdE_#seGkI@@b4Csb@(W*yv)fdC1}) zvhpNF{SQnICqzS+Q1qbMFRFj_k&16(%TuL_1k)}4|sTQ=d>Q0WHO;haaAZ!I;r+$ zy*~?#Z0-_Q+&I`FXuq0@IOO6xB)0yP$kDhQLdtO5r|gqjLb@J7##mT;!E2U+HDEu2S`v(_OPc?MRwc|EOlffJ+<@~!-kTtQ7${1 z4Bu5)-`Tz=jMVPqvW@yodO*x#q)rrYc`9gP!$KeM5}F9-Y9RlaPP?oBs_H(5mbgjtGYPfBv4Im#N-KFUh?-uNG6Urq4F1_fkg3DdNTKy!yw}3Qqj#HV(M!CSm&9 zo>5KDNn<&C;Ew=NSrO`I!0`+o(;H2 zW5+2Q-sktZgF+_+UoR=RH(t72A4V8@2lUb==NkyGYbt(T!VXdvC5}rmZ#9MSkS&i- z;?6G}!CTO6gtrzZD-LQp2_3B4F5(%e>2(+G1@c^ttKT}>cE+vp<4;z@^0Q21Fbi<%{v?1eiycOB< zt*6|jEW^j%?l(;w@ZG}85ROiNj@34N z6kJE@?EY?vXj!i_uqn!kKeCXI%(gI=?(5YLL^ZbD89P=YHP&4B9e9d}N;=*l(-c;X zr@)nq%z_{IfE(4XvG~?1g_T8VeBur+1)v2m0vC?*bOZ)Yny=R*hPn!`d;?ixO^w9| zsivSwizz|M=#Q8C8c8@fut4Y%UoIs#(wf>1TiwcX*-{7Ech@ESKb*QQE@oFon97j7Odwn4$wGTC?BGeuVkF0txV zzeYs&9(hZvG#`X&B1=isM}{~}r||36Vj_$0Wxf&d z=oC8I7-QWy88S#Boqd*rS`Ij~fjER2BiK)m=~HtY;)#sV1$ro~hM%-Nc{l_&9tIXi z;jrM`4LSwo7Di(AA8(Z-;PGZ%-_BM%mJ~1V1fIEkvAgrVeO{&A%j3x+xA*u0s+ngF zPfr>x0IT;w>ST-XEj({4tuwB>30lgD39%*!v)$b)tdUL~gcfY-?G7UkpGV4J zY9MJWa|wAf{`f}I?c#A{?q!(?HN#uZ1P9AXjbQp^uXTlf>fT`%+wlaK%G#ML;KKOH z>-ojiIrL*0{)(QDT$DgGXuDWWo?j7j#!>X+UDYxbyF$L$$1{mM*QmYOr5F4Rjz}<| zG_QE{ahIP;zzWoK^3s-d`k@pO!Ui~QtbX!$>8T5@edSR&k(@oZma=TUcah3B$K5e9 zAY{`UJF|0%Gq0S1M#xs?W8ukL$mT8Z0A=&w`U34sO_Lsa7V7+(6#7(O+#G1mhJl&2 z^aTmDps^y#E>&EBb(*>_F@_vT`LcVi?Y+G)=;zm3mDyoHLdrTv`|9zlmW28h9{Bms zpI#LuG-Fz1If^t13}HWaCoKq3CMu@-?Op^47d!?a2qU;*-o-LeXm0=6`8=>3)!xs& z$nDQ&*}Nz^gFg@7#D9n;PSW-p{gmAo%GIcVYnYzwi|TOWkS0f*?_*hN2LTlRV*V@7 zi?`!S@mD=AB6D(7DsU$0ud$y+kGQVRjZm@Zf2NLVVbjwsqs#$+%W-r$X1Y=$gY?ca zWf`rv)f0|^n1jq#DcJuP<~$xu$6SojPLQv<213R9&yV-#s&d0C$SE(L^F?2-e+Y0K z)%z?*RPN=15jbW(Wrd`7=qE^a$&`Y^A9B2oJiPxl+5dprk?ga_T*^qjQp-c&rMo~r z?egI6m&4W~6Q-h5p#UA%a>Dy- z-cZ@sWDJA3i9$$t!CA804vG2j=z*8%Hf5WfWP_?O`zJ_jaPMi{=hQwd@f&|&a7P*D zEu@gg!d`e)ll$fCAyF@^1C^GMSyF@?4Rm?j zc|J~eK2|XMH!Y=%6q6$0Anw7xx&A}}lLGnBDU?C^_T zB+<>D2)B+C-aQL!zSbYU5Iqx+dlxHkz+Ay*3w}$nds3#xS6=I0}Z$F2}E*sj!o1c`yBT&n&Hl7__$8 zo$$uWI0-7Av8{e)RT41MN{(>JiA&g4=VO9L?=9+MhMDq=4hfpG=e%Q0t+9PfxM|cX zH0_o5U4g(7f#J+Y60&fwC^jyKUMJ>XM~lJ;g9Hb~_8HC$2ONmZ->@89`Q;PyixE6< zgWDy-kf8$Dd$L%`IE@D59kHmz2s61N-g&RV*pt4=Un#1_&hC%S7@+{cn0g}HxQ&>I z7)W?@9=!JPdoL8qUaWs@A}e!g4V0NBiSNY<>qbD!_?(nv+SMguC@y^8_LR`uP4W6Q z;p!^Z%1)s>rT+Wx#+!q0;^N}&=Sj&jK94DGVDEC&mC74#We-P5AyAYIek_PdYAoZ& zB))b0Dt1%aP-9^hHB|=o@_u{1k6>K9hQpal*?h;+|HQn6CzNm!w@&qbv9ryiMLgU8 zWn-VVHUT%DJJ#`%MG?DfQf5Cchd9y?1S%W&v zjy|itvR6>%z8mfA&6gfQLOrXrda=6_0E^)r?ktrFMPzVm3n!}g^hkNit-86r7O_Q0 z=2}~eYq0s|r}xSEnSJ|}&H3+bj!5T(>x~C*O?ZlLMYRqdhP%g{JY?eJP;j?<>72vZ z_I{tc+%-{lvf3+94zClM=s$Z~ zE*g2qA|>~8PBBEL(raaYEWMKNz8d=vuG*SdoqP8h8)>{Dm3Zqx!f+jeQF24#&4(aE zwb?zt0uSA+WDrCC`en5FwH_VucS{;pW1SIy&IqbSSS>so$|zsyAnHY6JfWGIcGnb$ zb5jzVkH>@RJ1jEF68bUIj*L+b4Jfm3jGBxOr)!h^oee(e>v%=dpJLLPw&3^W~-gr3CO{T zd(gq$G^|XHwwhi|c=?<~-?^q3!iG__oIHpEhP>yt{^TTQcqZ*$urTTL8BXDlH(x?T zT7C`P=b|qy5wLj?@=V94x77y~`}Om`E3iXk^CFHR;pdD!yHx3ek9%>VZkQJrtPSrp zs!~uP>M*usaWt4YM8GlgMIk7dKSQ*Yn@)v-ms)Qh83C>!@+K7SY3}$ORG0a$6OTgD6`DQXH4!W6$GkCpZTgrb;fqH1Lw;EXJ-a92kgs z01Ly%Ux9-jSl=TWsqM{Tn3m7eN0Am*uB4MTu8~PM__oso$#;Pqixpr+Bgf9N3Zn#K z^VnD|{BCY;Gi@0JuF(xs)0mhO{VVP+I3=_*8NS^HEMVGI;B2+A-Bg&uD`sXWUtj1X zJfg6J`Sp{bDx+V0`mz=MpjUFhv28P_3F>f0+xHq7#tPv;DS?O)83YPBfH#cxO)Kb( zMjO8Haw;Vr@M-fux?C{wJaKZa=q&kNmn6_}v>eZs@#y}1KGG~v?P;*|mI;Y9lBs^n z8jp%iuBS0VrhmvFXMuO5(dvU5*A(0GYsJa#NDIb#JHnG;PkFRrlyeXsquWiBTeU6|C0&*lDkf^ci|dkT@TaI zRrhbS$ZXj*jvb9aka9^SuqVQfnFn-{8ev~N-kC$I9ya>NJ2b9?^9;#gxtDd@$@gJIwB_JebBRqox#8tI+hl)<()B z{BRu8Cw;QyLqnOjXEn8=H7Kz9X8-h0)B(K>*-U%x78o*X>Fy3Bw}N=O z<#B(IZh>cel%c*T_&-QkCh9`<1?AD zD1|?wb@CF=QU=aCe9xkoZ5Zx2(Dn{|`ND+pi}9>V1Mw#Zp0}kKaFh>wB#ReG&)Kt(GJ;z;6`mlqeJwzkYnTjP^;R&9_t(ig;$ zgkbJRuw47tE2$d9!HUrEaKTTXVCrn5dOJnK@XZE6T&Y^3{UY$0B=nBtR;xS$N+Mhm z`WU;y7q+Zg)Y5$x!g>ni&b+&uh? zYG@o{bC=4tg5*$pP!%-z^KCd5=18!;UA_DyX`|(_-ibv%yoE?2#B^&@uZ^?rQi3b# zZZZ{Z;h?agVr+0%Z(ilI-0W3ey@Dyb+)!R`86%XU)&jN|~t)a3UM$s=%+lauHOP~BK$vKxob zFP7kiKb#pp%GGw6;F_)&AH~3H!X)K7J94z0Hfs zhUkBNz+vN^R@dFJz4#caLo;tE`?vv2*DsUC^TlVcIWIT;X|+5ljW(k-NlcCTMlk-B zCFDf;B^eMz3?kQC(3Jk`sVHBof(gAujKOo(&5A-7hy@|10udqM?RK+14${;SW?5mMnCvER!HN}KTz({pYLac2;Ks(%e; z!V-?U_um5Rnd`^rKW{&e-hfSg6 z5ARGC@UO$-7L6t3h!;OsJ;-iQ5o+HaK=(1$3T^cCEt06IA@YXWv)-@Yw9pex98ax# zFg>nu?^c5lRX06I-m!Y7SB#?cys6oC(-q(P4cDzn+n;o+vy%!!89g(u&84Uq>dV_T zz4z3M*Vi02_im@I7wU?@fvvU7Sudmanbe6w8XuB&h?G2Boh=arALWrdX+4F7qPT<< z?7gew*~^)k0{Y!=2KG3_AD2L%`HAlb+g**_38Bh^)nS{okf=W2a_M_{y9AE@Ag&30 zqbic6J163~h_b0Pw^O)|lC3dXdv{?|RFzg8^$~{y@?W)k$ntEnl$7lhU*k6ziUtyA zl!K0HX4{K>Ts^xY$!(0MHVK~+&%Boq0}W4G8Yo}iy>o{1fsqj`u#uJ#M-iXed@-iPiJ146^Ig)xx$mux*CRCeFITR;id5%B7QA5a zCM4bs+HBl7e=;K7V)(9Xu+Fl<)Y|3o)fT5jXfA?%tvWCo4S4qv*Vx;e*9k5Zxp-?$ zlf9kz#0Iykb#HQ9G>%>Fg>U!f;@~U0@@zgYuMJEcO=Sy4-w|8)0|#1mZi=r>nEw!V zI8(rqRvVV;TLebdrL2W^xBBq%=WD3tZcpbjOZ*D2-~Hh2jyGN|9-x4Xp@OnnD2UR+ ztcWvi({43_zACDw>IfCqAUs93dpQaa_JWe-oSIq-b1p~C%QJberigs?vDzGG%YC2U z=6AC5o~p$)c!FRmKM{(wMprD~MT0Df&n1zY6F0uCBgFlYnUD8)O#e31u^z1d8FiH{^mTflz&^w3Q0bBlBdK>^3{6jCX z^>*##PLQNR*Mm8FoRhNOKB~itFp^6vxZ2BpUjwL^N$W*=IpiH(8?5 zCnH_aRj648t)@03CFiwsPYW^M3+FWZf;oDo;Pcs(y0!wv;q1kfb z-1AD1Bwgj(F~K~Cy)9c}b*2{4Wgec7hc@Fv*LDeb_FA2DXhQ80Dn95ycx8|6+*{K_P|K z!b6g4NbUCH><0l26jWr}wRb$fCF?uefEiCDPY3mH&mnKcUwu4ON)uK^g*-bDmgpUz zge~((X}u-16NpTBhm+4M8XC)s)s{lPJOqafiqVyP zG(SB(eSNsN2W4b%yB=p1RxSPZ`5)zfW!q8%71BwzElcFuit-eK5z$>GE9qhQ z;jb&``NwM*LMD~u{paVUCR*VRD}x47e8@xC=MHD%2VQx-BaGLDFl?miWvMcX z2!kT+JS_|Q0~(Jrm7*l_%)@l&A@yXqN~<}Z+esC9zBg(IXl*k;)ZsvgtM^!^Ny7Vx z2!?RdJ@qUP_=6HJcPMxKyurj|Ed}2?!Jpg}xX4H5@vOVm;H>-pT7JKHwVcROAhwgA z@n&Fi?i3&NCj`m*caZ`?3rthywkkYKN#k%J5o@~gOHyzW zW|Nwf0L=4vDRAXw!*Ah3qaXEzKCsUa8Ro~&oxYl?#vXiWtO;NexuLJ(tN^nk0vZuW zD_GL|+(yp2T290h==~G(z@Q^>4sOYXZEq76p_QY29NMv1vkn?wBs0ISD9fm!9U(94 z!G8U&5^_XLa!%rPPg^DF-!Djbk!*m`Zd(2=80~V&AyBTHdcO0MV_h|0;9kl4jga}8 z2=Q2yT{NHnK<@`1oy|-CfFQ9ENU82?29tEX>Sk0_+s>RZXj`udwyYAgPK}`&1eqDM z=(5XqEZk(uq|@TVexo6`!V^8y} z&)Y=)wBl%;1#y4B%`{GFVr9K#Fs;7Ym34DsJw>=s1Enfu44PM2C?3UNVXc4S?p)=# zw6^@1lxw(mCYCE6GCsBB{^9P}61Nmq58#Bs$VT!-MmzoI*P>d^pf9_ewubdK&dcol zj3!{Zb_mN z!o@%Cle^)-W8W-uVa7)6l-3Kdj;Nud0tfEo9x@R8FrXnoE@~QCDK@p8fT1a;@>g zQXm?=-=2MH6UI@HuJG4ssQfYijL%E*3%G6qD+6s8sBZbB*790jrqIxi{)G1gA`~R| zetsi$p(0)Kh}~C6E2@>I?6IAlPfa+aWMw&}ym@S9+CfqpZDZfVvLN)|(T#WrXn@T* z+q(eYE}VMp&ce+626P=ne?dc(VG*ug?|_s!@N*BH$%v219Y-wq1~7FhDPziV$WGHJ zFMj>>Pfq0iZOFsk2$-s88(Rd0}a%(+z7!b7GRAg zDs){}0nKLMpzKOS2B6 zr}I~5aH>k{C4Y-Ce7n#>rz&?Q@zDVulBNJrfFK7#H(c(ufzej2WSMIQa!@+7~-N*=URDAHaZ`e(jTtGnyh-v8q(uzMI ztw1n)3iLGk3p==sPH>;74ULV0B*J&kGMn1#o&`AWMaO}u&<8o^GZf@5P?F|y-IUii zH%Gj((jW7-`oqHq92~J92;mEW#|g<{l7Q&B!xbMGfDbe*(+8@sxd_F5AVPIuT; zO>r|I`q`blM$&&~heNT^84-U!9_LNWNU@kYjHDPx*pg;x@k}FZcPM3cZLovm9a*n7 z;_<8}{cMeXaclyBDaozmEGnBJiS8tCg4~@QKF0(?xEw3_TVcOxgR923gAy=$hSXohqt*;!_*?IA4D+KpvAOum zTKN4;?5~%#$7g!$>bMc0tJ{G=51vnQI9$C;sM=*h)k&k=`Tj>&Gf|65J3S1V@52lF!6~(N=wiu2zp%@N56U(=HU!3llwYRWaJpD;BM=d zMQ{XmtGs33gTs)K+ns(fV>PRhWfJd&qUdE?Y(CL}g&kD`DscW-%*j^AVo@iBy+|;E z$6c4t!o7qx!;Izkp&+an$6bA|rx9ptdHGaV)+rWMJHA4T$6%{5bCCZYo_t-GTdivN z<*Sf}?h>DuA`6$%rcK2Xs}6w8fNeAvR4_N7|7Cx#UY;6iG!Y}*e}ByZcnloMsb4Ia zNPPieSv8q!kLKxP|WDr!cTV8w8-+3dNl=gah@7d?dqJ{M%} z^cIXw417T{|E2JTMW*NRL_}gEM%TXJIYeYnwwsvAYyvmr#z#oQGh~B7M?Jjo4%ww4 z^!uz9^(4XQ1gYf5cUSRu18P9ZkhNTgD@VXX!#q_YTBb--?`%lF_3DyWO{u7@q=WO2 z{I!}9X#n){GA#^yqa;d~u*K$uL`hBLod8{le7^bSy>rNhBay^Kq5Qeqt?vUZ!%^pa z3Pv?aQ>3fKu8JZWP}KBKMK^>!xOKAYqE&=GYLn>5`bH@m2WT`eW?I^m-S9BC@V~!b z2i67b{?$aIzEZ>A`eEoOW7{r?-0Wk{zvtn19NsDIAxCgNMK-;2*A7)ieae7>W(9$y zmEO;lvR)BqwBxEy=BAv@VH%zS!66{|hlxdoE-86%2z!G|KmY-a0RH^BV~sadI)>m+ z1m;#aaY>N_x)(+^FO@o<2Yrdxmt#ec6I)3Ty%?v5*ow43yASFBXT7p7mC6abwplMd6z}tHX^V(69hgNGE zEO3j=W32fNu&$G^qk(a>ZES&KE@sZd7$lGa+chJ@Snn>t7IXlsKYmuq>vDv7avDP` zI{O8?%dMKbWVT}d~HN7#Y zChaq}I$Y|68(HHwbzo8{sjvx-d9TbV(*oo9w8oBQCFqbMX+B7733a zXhC=U$jy(TqT8S&={o#ybGgXhfwmkU%`91=Iv3<*zgc)cl0>*hX2Jl{_rZ5}sOD;; z3Gml-y6Z^?ZbD0mf}r19h&&r?*2u)Ll z51PNXZMeqUd&uL<49Ur%HGcC(@AvAP>93fPq)5juQPD+bhr0TdPA`5L?9XxqfBEvc z#e1#b6u5Ra3PI>K+5jpprHU9`jcSgu#Fz%O(Jg`>|Dv=4@d(Pjy^kUS#C;nBOjF(W zgp-~HBn|1c3k5x=IstYyZBZ!1E#zI@w7Oz00k6y_0?G<2%fFX-$I$=|;ZvSqzhZxn zZ&Sea3Cza~o`}!3u%g$^N~QcseJz1y;m-I>BPMVA1*MD!R|Vs4HL+TDlrn)aw{;2n z9;0Vv-dKjb2b$bCxkf|VXh+-$ucGeL@0kc+oy^ekaL zC`9WNFd*_4nab@cG3sgW`Dv-j<2=ZZQ%^LK2`FCtM|PGOO#o8->X3ZT=`mrkaQp$$ z9j!9we1EH7DrWK{;SQNeh@2MdFTeA=!Z~gCYSN!*Ci0QF^j~_gql0!fRpssNO4}KU zeg<)IgRP|ii9Z=oo8;TTY8<)ZwS86S$OBfLbRmo3b7|@U-dFqD5VsBI|?)o9QiZM%j?KpQ% z#bxgvIe(8h^`&XB5|=Mj|6vXO#CJkKY!m{-#v*DE+Ti5v6_|oNO7{$22b&*ts-yp~ zHkp)~Fe;~H)p|jwIEI`K>o0#Xz&HWcFwB+J5g;no>z1MSkEA|MB-cC6NvkXmIr0bC z79N;wDY1VB{W<*4d}US0k>I!as=A|TP|w6sB=?PPSr&U!irYuUe1OY4UP}~OW~eq^ z=9aO&#)!=if4EG8@s_3j6swhX|%geP(EfI zbIbi9>03SQK#I(TyLd5rr=Wph;QE5{K===B_v5hj!E}oQgvFDG1bF<nv_CsO#KP1h>a^wi-5)|Apy)8hkHgn@R{r7S z;z9xp>tu;e(C*YICOFgAm3(A)^KqOB9G5K4YKeKQ^edHk&wbkcQezA=GVH^+fxyt& z)`&l#>YDc{8}BC|=cEv6r2-xwuA@iy3*`wHcTQRu#Pxn%E{cHM(3Tv7QKrW8HR>1L zXo0~-PTy1GV9-7JF?lNbY?nP)%1;=d<3cx+U4YVM7}AeS?yTRHGy6punS#xcA)i{7 zx_Bz$3-o|L0o09n?skNhR4<>5QFGWUDNOdBP)B@n$aj^=6#zP%kJhwlE$CVd2y+h2 z$p)yUTd64~XbpU)j5exHO>ex0zFltHPvSUp3*tKs2@Q{dvo1jjJXJLNQ^*_`PdbU8 zYFB8dXmpsMxhL%vT*g$_0q1w4R>>(*{bu!AvNryK;7#^~DOh~PR;29taR`OHC*v)g zKZOS8nc62?5;yw|A;DVqaIYKcDt_LdI^a<}_&+xk{D3!YQb1S6ob7`-?GX6%^VQtllxNfVP?Bq12;1jOvevNm&9b$u8+yV;(mANq(!!8L z;dX?_nfS>jyjK^qTAq1#v=&rT4~YzgM}>k{Hn)8MPBA{K!lI%(hV}6H^SZt}51X$C zh1z`by3RI-K!xL)*fzE7j-TTb^7 zK5jrwT$_&TALm_|PF0J1Iiuij(?mW4ej9+_(!@ey`yG9hyUkUVsLqKn-s>TYzo9Rs zZ^=C2LMt$TIza>n+lmJS?cOzGhj!92Gv8mfD8UgTQDm_LpoqWj8+|9Sh-UlE)?(7_ zl`CKCkj(uJo)VW`*saYsiMnqUJmC^DCK{@UGYCP4g=laP*f-?s?^eWXJsURBwMqB; z6545oB>_3_i+cAB{_?yHc``IAJG0h z(52DW+3A_)HgOPmLM|9ML_Yl>b4GurjONeUjZ6oQs$H-(t0YH86}0Q=YFXhkH`+Sl z!fSBpKKI(?7YmC|fIwr*0mG`7%Ke*VGr~wikPc^ZVn&7PUKyF}kjtEDv2*qOw8;cB z;b3n2FlfM}ni^6&vvB6r4^o&OEtf32w`z2-#$jh|VPAL9{&15V&I!GI4hwh?=YiR9 zr?PQ69|CnAnj?4AjTewuL=J~qyQAw{yQE#0XGa#1OHi%+0kbCE-g}@^6V2TI-j!yG z4vGj8f4UEMW_bwv$h}8@AkK~N!k)#Y{gHE>5b{J32P%`JbvCc->kOoLoU1O1I2C;0 zmp93BdXdr08$BAYiAtb;fCCkcM{L-i+Vn6VSHM)6<|tuJ(eWVKS>k#yadCEb*pRBa zT1aUi5`rO>XKuX~h#X0zj@eISt>i3#$SS%BKcz{*(Mo?**O={UH`kiidy`#Gn=^F@ zX(jc=Ezk6`yMg+Fu`!${M`{|&PwsJaanaR_$M{6MLV3m_w%X<&<_S(Bl#GHT0@&CD zub#M9JwqxFVI@yhT=A*uNy_U9rTHI=b*QnwuzB6NJh@OHGLu=W>WV6%GnLcMg@{-D zsx+4+z;kg46E9noPDN-E6ENtmu3%wduM92h2cU)rtJ)HEI3Z3d7ZzpC&vP~ zDXXV054(oBc9d0+#D{v5%2RprZ5Vfrjj%r<`TUl=g|01LSDd7FvCqS58W0Wq#>p++ zN7qh>8cYAYG%**D1(Wv-D>X;7c)&Em_ujo^xmFD^@ch;m&X%ZR^Bv2^!;;bDQo>L3 zU0j#*ITT(GdihI#Grena=h92m3f@u{e5<<8jD+<$WD0aXDk@sT8f?=^03~G;_}=vV z4kY-({WwMM!}j*OXH@2o)HFg(OB(ah4Puid+={(Mo%Xph-RoJdY5{`TM@a3m+bvT# zm$E;H4H&N(6QAm!QGfG<*s^P#x<6i$yt+Du5nNfx(#lscFhd?fs8G>v1r!~L27pE% zlf$NGSGeBGA$sqfMuHI&16>hUUL&C4C%JyBso??cu{+^{iFu#MSYklG(gu`gjVK>* ziyz)w=&HDcjNoHop$iCH;H`Icxp~f?yMu^RDLU2(%|0^|3wNFz{PFciZwh{_j9H%E zsLWF$3dBH7s*UIT8OlkLR>>DjlZTtX*$f{(k<^$EDhuRoS(*640W@(w%{d?oK!_x<`+-5` zlKhUXz#LnppqUj=+F{HjVp6KE^3xhn*Ii0cLw>Kf%HLLL?4OW!rAFO7Br*?j@$)F#-6dFt_6pH_H9yCoG@q}<>y1Sb?2rA{_ zdk=G*?^heB(S29uoZVGyDo6M!n@}f0{#|84uRZ5CorxOK1b|+TQT%lC^u@N<9-;kPvSo{k zH>d3|uUgKR6~~&wa^-FK2Ot>+J`piOIK(5C_2e^0h9t`1IN2<^9HjNqeFi}$=+e}8 zP~A zXH#M4o||@`Ca6?J-{rLD@47FC_f|cyRx1H=DN>gEUv+sWYqmXLcF6wf)o| zQ$op+?n!*Er$M2G1w?^jy1Tdc%e(0hmitpF=SEul+Ruw51iSMayFO0#lpSEYKi3~L z)lrRK;nA}97Oss|3IV%XcY&L37)?i#-9r7_2B_x393-?*tznJ~?Es43sPk0TnH}x6 zSHrJBKLyU}PH+aiy>NlF8pqCZ;>k5VuNi+3h-b)Htq7~uZgNWp_4AEM@+v@Z#`q~P z{oL-?KvvdF;HD%S-Xjxt0IE9qI6W+>f9}~yAbn=yjd=E$7|_D9o_8m93sAaUbmI&# zZfq74aJbtFw%-W`_Yu~&crNL*uXhT2MP=3AFoUqj@6iIGO!swuo66u*cxmiJ=rx@f z(R@hO2FiT`KXyRTd#$yI&5NOccrz?e~-YCKM|_RlWQ=l7_*Cc4uR2uQui zF3@~M9S1`@hRnX6SaIaNAN3X%^W98Q5{F>T)k`rE{x6;;_U|((Cq62Lle8qe`Mf$L zeSNh_uZ~f8y5eFE6}v+}VB`ND3%#7Xk{Zhqn#UrqF+X6<0JzQJ@r7x*No zRPh#CR;{KQ8+BQAIH~Ec`ZuH$82#eR$KQp zBISuc&Ob0fWofd?grQM_mz9!Ouq)Q`O!9!eGyyvzEnww3JH4WnN8lAu&8(J-xcg?V z`J1loTA*{l9N$=ReVsupxCKSMA$a+Dx%lE5gP|Zp_i+K-01ce9y*>r(je~jghXZLs2c`g?vI>8nIXTJ5zy0VMP+$n(`#E6V!35CkB`3$Lq;>IY^bl#C{?I) zvMvf2IBD?cmk}xK}hultaw%G5PL{FCpC?%`sSi{qe$w3UZ8xh$f&Q7LmB@~vNs zo>IEDy5SdbKOm3RAMztGD{D-(Qq{FnrOx#z?dN~E0CSj9P1>uO4FOTcKF}}!TeC|c zeh8o}+m>_cOd*GHIv}<^h$u8Vf3bfY9Pvf3k}=H(@+h-JXLXO=tAVqlfqRw?i9pYNE5PiXNQ|faD)l^u zVXD9XQo~36t84N6ivWVu>@oq-ziaA$kp1>g4&w&hRti=`f(b;y7UUvu0O{!OXPxzedK1gu1GZTeCLNFfmZUn9axW`mKRP=zw7xQdk`1&c z2PMvpNg5v=K95Y6*yvPRbZam5O@j{4po)d>a((}1%fEdT9fWXnM~Nj)ML*!zi$9kX z0613te@geydMTVmGMNQEprK)4!iI?#c=`FuC;QB#J}Dn`Ej@4YZ2KfJ_nki4RRGW@ ztmdA|q5}!iX=lw;m7+IW2qK$wUWEr!vt0&oU>Ju}iXo1`{!i)gqHR%%9*SLjDA;(D zN-yow(aiVePVM9hP8?K~*BPt6bn1tZi=;dq;irlh=vcf8$CWMC2ItOKqWKHV|KL;h z6eWj^zZR2HeD%-T^9-H~S4p)w6Nxtz0Gt5|*6;^ky_mG>14d{Rdcdn{wb4t=f!4e!B$OWq)CumFk+qCO_h3}FjMe+veTzO2n*_A`=Y z-*ozG(f;cC)jBsf=OZ+>5d1aM79yUY>kX&Cd&k`ez1)}M+<%cI6`1lwJekb98lB%81 zsydQ&_g>KH&F`@4hx^+^LqM1X-_ZXwt=Y?{Krg}Xf3}B>w2)4F2U&r_%6P?yXEaEF z^6(QSH(VKvWOVlQ_Hu|~R6WDT?=r23`MCpb3r9<6rTFvRWh|AA-pp~_sjL_7RVXdGP?$lQJ&w`kOkIQ(9RmC?N!^HkC751j8S zh8Un-i2|rxQPMI|vC29aw4i($`wJBbH8w0P{M{J7PwB8i)7jgYXF5cY-@oH#S7Q&^ z_RJ@6nSotKm-#=c0CaQT`fPhuF`)jK?=Q7@dy7kmKljUq4@(CPqA2KUTRv#Scp`wD zlH{fV*w;^!4e?n`eZ&(@J3oGbjU;w+DXFSTAog0aZDi#Arm!$QP&t4>V25F^(`w1O z;RMH`{}K7X%=}b$OKK@?lUG%eSD0_Mzny)yRHe+)gP~e@`ib=L5&Hf6Z*s2)mCi`F z)Bz&^=$>be)7T@4y-id(v-1!`G~4-~EgUvjeFdGw!6TYxY}p=PU@j3x5(pZB(N_uW zl}Ycesl_dPetqBt^dd&8EX@`Yur~9FumD&JKuEj~(o{(MRf@pMPd%ZlyX^aV>-r!= z?c%j^!E%@?)90L=oUW2SP%SaPW%>k$KfoZo^b&&XO_%v&C4uVrH*JK#U_grgx$J1( zjwx~JrKbl6hl#41(v{r1IUi{L3oB*ZJL1kK<f(7F<+JOt=*H zyB15}Tv|FA%?H|dLY_Zq|6shJbimceJ0(AD)(zlCX?{onE2o$TW#|Rj|xk|)zw(WsyyPfrw=_pU_jhu_;~P) zgd}W4FC7sDW$ea;j-I~F7v>AE?J`7;mYQ9;QSdFOHoiXL1wbH3Ve(kdx0bF@eV_dU z&G^Uho&-6)O4*Y-AZnurnv}}1L|5W(2Y?vKpm~#CxNbT=>(Y90OdV73bT$C!Myc_D zdRBIJTh}B$&`%%M&;bvkpnvP?D4lJyezx1~+)g1L`E7$^ZsQk>a@>8Gs)1 zK>Y^^t?KG(L{!w)+D``Tj=i|k)6>tnxX=J=Jj}BoKfl!d(puEVTV=;qtxTVqMY}$0 zTzLgMKstv^{W1nq><5+lKYdjHx4!)tkfAD=Y`)P{${au@0+a8r+uRPxfw@Mg^!ta+d&%cfoWK1HH*9auGP@c)l>Gt+?`JE$1>-LJ zQ|%%LhuHqZ@iu6U8qdxd!nHnAm`evd8!W{3bVC-Elv~rRLDST~u~j}DQ=K^L>1)0Z zBmYC~X7tZieg4m^tN{C^9DmL#<-ssd5bG4SJu$QZat10QpnRgDFiC_RFo6vZv$B{h z?gYUU#0QO-hof4B_cHy-$C!Rm{--RF@hh+^v9MNx5iwMxUsXT0LW#c__%K`Y0Xulr zspR2y$xoe7T~h~IPb+ZLOTUajzjm(@f&crgl_e!EFBAo<&9SWq;1}aD$$Y(DwW&54qe)9kKeayU@`{OA zhoh&-$<^*9(rQA2Igc;!F)@8zV!7urTlmIu)E8aWKQLd z3}wDI@t_Y4NaN(R$el6)8ZwYJBriW;yAbhwy^uu&+53agxOn5qQXkzjIh6+$@w zUa6yd6CvtUEq#(tHaV-PJNLd`y1V%C!5id@3mM4RF4S7Ai?nY{r9iBR8QR&8_Q;f$ zXN%@1W@zy3D1u{3v^NP($gF^Cly!4Uj!5Q!M7{3%|QVo<$Q8=rDgSXmR@%}3{ zDK4@4y&PqbUZ8Tey16j_t(25#&Y%|T(Ay%RD6%%!C2{f3x;{_Br~kTodJ0k2z_E?= zg%P2;6*<-j^w>|i4$w|{WoJjdyJ$=+C?YxP`}Y?vEKS>%QlxhS<3I%aCX#;eKQ{;t zduP1nn*raXu*?aY5u!hhyO96s_Uz07yfU%K;~k3rnm!gLCL%au<5X2UeL?!d>j^q< zzx^6u2JV6S&ljiBjrJzBcJ}gBa*a@)(-_Tv67SSoPJ89IDNXwNE8ay&f;wmy^T;mx zU$sj^eU>kY%kiHS8mySJl*3cKeU{l_z)*bF`^P7~bI?*6%a(cejzENLtvj+{EjACu zW|HLk`r2>v+gvf5t3Yrt87}I7VHfeU+MH;31Q>WYLnY0YJm7#DP?Tp|I6oy~ZU7pNMJh!^30!=+9z zY7rO5fMyJky=t8gf9jd`uPZ|uuR4Y9?7$y7l>$@dR8P?%r)wYdrYWob4W&~`L(0S-HAQPm zTr9;b68D0X89}5^FaPfgzqr4S@WY%($e(IPg}uq<$^FdC%;VYJl1#Nze3!?2jHsw6 zU0dR?V?r?Ifl&WdbIfpik#qc_GylgdfxVKfm{`WF{kqeGn>QKONQYcNdgA(qHE7iO z?`wPLexs(euPJw;8VKLUvv~>rl=Fo5_4QRhG-z%01PF`{Q~HJwqGHwvAYbXsn?vJVqgl!e%X(jy}=Pue=9By`Nv0LyojtV(M|ML zDzJiqhGx@icL^iskz33EF+Z>Q(gusdrFfhjS52>kAiD_61l8n|^!8tu8^kEEF&Ml` z)Pf6#d187ps8Y|CiAz`9WQpfkCj_fmB42Old{PKjFyW8cmZUGbc^dC#}jX|=>d@hEMt0?*c{7jWN;jPZdsQv&(BQ4~R>*&a ze6iA}D^Nm&8bm*QLyikLFJ%rZaGJxOnxwHL#2WGc^7q_Reu$do5?7usfIx!!scdDh zw2s{J4Cojv1qVi6Qf43^|6?k$-hVaW!F6@=&w7C;M=wC}Erx@u4jrf@;rrwru zT^;dLkGlU{XKYyi+*9D6F^K>1Dd3ylh5h42z@*_A{JqD)k9&R*{5_lC#~kec-~RV^ z`UmiWh4ocO0aXFV?EhXhPtQs9)2EkP?BRCiB$GxRj#o{jDdsJ$rPU-Y8d$*n`}Zhc zWIdx=4HW8Ojs4L;kAcUs!dBMp2KO{+|Gn_3N_~aMwwDbKj0GJC(%8!?j`=pMq5r$a zu)adNi)DfJeP=mWX4tRojs-*6q-WK6MUW6lVrS3e``@W|c;VNRo2sHf*||aWw)Tgr z?)Xsl>=!l%PD!(;)|3Ca-UZ9>{^##cfBrunzObJhMBv@6t< zWnz0v%ye&Ki0-M*)4Emcg?Mi7r-?rQmbG0ZN3m>8JY=LhH#pd#4T3g-Bw)cV;dtJW z%kr>Awt}RCA<${TL5P|9A-Ksz@wl%UmZa{R+0g@$yTEe7t8lzX9L`X}wDh2e%p!4H z63g(nlk~0nTYtSK*-KyTiz_Q9NvT5dkj=qg>&tjn-1bWaZRgrtE0$a zYMB0oes-BvmwLlg?J~AYC!I^5@Nql{COR=Jv@I}rXf4`K*W6)sbsIi!32mk+r>^Z< z2RV~lz>CPc-_<{&bCXDq=8?wU@o;cGb4QvS*a_An^&HoBx0b>=OR&ehWi^aXHxd_* z0d_4D8_Ff$1`}V_njW#24ky%CK}0g(25#*-y=~fCnAF~@HrQaQTy{?NuNllBdSQr5 zbt8?xNPzRxrC6~R0bQ&AR|x`k%kITPu+*<@u|j={4jo?|PNMY#o0ee?LNE!OWwS`xLkF=O zTa4tzsRl=wUrf9HtPdd_{S%w-X=0|{qx{>_IGlp2eYVDE)^?aA+@T_uX0!*PxX2h)!6)u>P}5y?_gkKiYvMe=sdm+IZoOj%$tiK#Y_`dY($ME^M#oI>Y*d`a< zu&upNiAD5~Zek2-z13BNsBQMgm(&HY)J7cBGav7bt+Vk6GZQe9<0JzZ9$GXRBrka| zmK`)BR_mBYoCijjC@G=fO?!0Hn9g4^yEUb%!lp{Y@2y@Irs`-GdHFL3B(QG;>%lq(JsnI#*6&%%>U0G zHfMEku$1$NO2yI4Byl`@KEuRJZn2k3p$f!HAWC)r);JPP@?(6%avjE`R@ZvK9lr%* z!lI9qP21WV;*xDVkR@o;r%%yvCDLiZMRM0*+!Kh4z|$}YAMOp3dCj9yX|7p?Z8nvM z`^xrnaL)%e(bw>wN~_w*?Hh98OoZ>wkvATl@J7M#5xN?wR#W4P+`A)K=tQ=cMhM4O zZ9t=I8tQR_wW~z>qrPLJ>_pu?k&`Yj1qs6zKdZH>ikpp31nX-;|2-&gbv}C&@2!+y z5i?ZN*=)Z}q?l|bZRK<#!A(me>_h374-I9?q_CoG^{1b-x z*N!TG*J;G@?s^Z`P#THyActSkh#G#fnT#4yI_|BJiyNV0qEN74k`?Zw&PVn12^T3V z>0Tq$K?2ch0WfeGcAQn#4|geiYC}RzHA^08MtDv#uV8UP5^j~ zwv|<46550x?4{2JT?-h21-fh6qbSNvT8Y+SDmwL?oeN$$G{X=eW_)3cOO;dV)&ChQ z6k@}p@zS>JjngZ>17p0zJ$DXTV0Z5X_w`JeCG4D#%29T@FO4kaoRsOJdlhIr5t|)^ zq<&Fe)y}m6pI}y(E!F4BHZ&DmC`?`uQLTJ*TIpX@h4-OcChDt-a?UMI`iaNEzIo_s zIWl-?!NmMn(1~-@55t*-q3vSI=2vc?H z-9=>FkraYXzzrWm%I#`k??)5xnxF2I zA&JKsr(iP5V*c)D?1+e_S8Y5dVp;et85~LFl|%@aX7~HNwJzvhHoutM34bPWVYXfYQwT#&p{Km87zcHl)ywF#ftr5Tub<=3)!h+L)$3jqPM z{+7F>IZ6K^?mojXg@?EV`FuvbE`5^X!s27#r|3Ry0xv^{6bIJi?F)u#ad{~Dk{rX-D#$ENXw)5 z=Gc=ejm5l|ZdT26leP znfq;&_HACDK~?e0Treo9Ym1-eRIrM*^N^#`_c1G7Q4%-dT;u!Iz?G2fd4-tV37NPYH=UNB;HQH~eX>s4fW9K(!`U zQi9;7i#GA>u*P(CQ!i+W46QTX`T_AGk4Tq^K3Z=m;Um+$EgEnP%PWTAz{x8mF=}6d z@0%YiI6tM<$EvSB`ZY{P?qIe-;bOHmm#mO)SL6lkWfO|Av(|(rFPE6)O+mQ+1 zJ&071{LDZma=wi;|E{RcY4T=<6t7#+OMe~D^gmpHGThgT0vTh%vS1VUb<9f=O^zVg zcLl=a-qpydJ7EuAVD}T?eSUlIH!QyG@lo}IZ!)do(Kh+ir#*G2qEsvCH`#dcCo^wJ zROe+rc{Qf)Sl(q2+_AkDs+##@L>vC?LV70N+ADs(rEIooBs>fHuJI5(*1FC&V-&fc z1n={Et$PTBw%BCt{BY2sDN;ouK-VL(cjA@%(9acrM-{d#&(|LORb1+@N-2^IhIS;4 z@xH)`w!O-(FNdLOVn577bU-bsmsons*v=zhqyKwjm#(CA7%?f9$WY~wS_Z8#AS zuby6TE1P?ArS05hg=3_cMm$(G;YCUggmSAb%SNZcgBH;YsB85ItwR+%OX@5!Ys;Mu z9*;xJg(6X=7r&LNvDx{#PDO`ewOuMhQBmX)lgSEQ~g7BvpM%i-AI%+U}RS}sYu5U!BUFLW`v_q`a zwxddYX|AY_mgd|h%Oxp6g$6WPkF6G$PtkBOn^41z z+jjOJ%T5T=e@_1<6p9tN-L^xc=r8_2gmk0of?#ezXWv!BqAbk{G7jHRr8L!Tu0=$! z9X?S~EvXALFqNT8F4@RgMwmiQ6!xrHFjK{6U}{0`xaMHKA4bP2vb&^$AH>B4v(?J_ zSo*~~WU!`x_I=JP1ds>@v@iO{8;{@k(&ee^zj*#q`fxWzm1K|O?G0jHS1RHKs(de-%gD@GL7qyaW|#D$uBnXn`H2+!Ps0cHa8_0LYX#e1 zUFyB5!lzVKBrU=Yv3!n&ppW(k6J3rAIE^*l18ux+uzO4IX1M*nP+oo!k7+p`91uLZ z$z^+YfA{htMRv?W8Q;3;8TxJ9Pw% zf|WOlK1RwdKPC7F{T|qjPD69AJS3Y(ZYdU8Ut_#KRJXR1NLE7|@`NGikdrIy)y^gT zrh@PZ?dm-JqOCyS!g~Rpj2*3e8>UKMZsE^1kaEMPzuZag2gz=z=TkR)%+^U_m3IUm zZYjm{&YXDh`E2a|(##yx@g2TB0>xx*@|#9X9Y4)WPYwoS3O7FInsmKh9m^R+<|?%$@|G}3ChmH>qQPk)3{lUu#;;?Yi4VC!&0I7B>X!@ zwBD!HdZF>xB7;p(>-Z|H%~_X$V0SM#$+)E$edHZZ$X8l;lBaPI+xn3!)ueNw8N&=~ z7(pw^;^OtEbZ#a5DRf!672}vJra}vu=qr)OWIQdKUn73qlS1JAj1i3NAaORnH2L)B z=QUR6Rp(X%e$?oq7E^&WJs6|*U}YK6L8NRO{-O((_y<+jvaY=GK974|rs8s)Jc<7U zn2bpfsq_|8$@Z${I9Obl?Uxi8j=RF&m5%&~XeO%wg@wm?41=&XX>o6-;P*!335{tF zUHeCGlScf@XZf64L17lfKags1F027MVa5R`p?M&(U}xo?`Sb$7{;wb!|U=KGWq^0Y5gr2#apUSAwvwF$nQbe5E}_Mu)(@7x-#>G)@= zX^A#cxI4Z8k0ium>$8aKL*uBe$Z&llAr{E;h)g{xqyO;9ug?@sRzOkJh;`*s^u-Ku zdidR%gOkl>2&f0z50(Oy-aJ#0i|URUOb(WtVi^A2*QVQ3d)Y)sJ_-^w011j&hUfPy zJB5dBU3#aJidAFfbtOwO7qKp+$=)=O&OCuh28Wa^IfRie*wrswdJJ2hjh!vI8iz+p z8&%MICt)F2=8@E%Ehv=Ckw*dO<5eYgjtmhbMs)?*o(rpzaiD)(D+TxHXDnYkw9+NUoUAZ@v$XCuPk{u4-kQs+F#;Jog zf6XFsvu%^GG3|SnA|EOM2fYk~BM7>IYS_&FLTDR4d~*fe#7|hC*XF7`(&7!3rvKeo zNuNP7_nd)5Ij=Vrl%Y0x_^XCwHacA7(w*Z)rFd-zG1_;>Q&EZRHuDY1L36`x#W@@| zb?3d2u_+S{5&I>)S6TP_x6>5pI72U)-X*LRADnPI(ZWa8Vgq=A{v%Gq-((fg)PC7J zGwA(!>qPgdXEO_0Nb+?+nMx6fqlo3;lUOtx`Ii(9O(hLqrfS&<$IRGtyxP`j<>+29 zYIxA>e-(O|t^!aX4>1wOXx?Ez@GxH4F~Ti^OTkx-sd zgi+UZw>p}06BYYpiu0t8M&i&uy;ab3tsI!3TGB5vRx@5;TP4pUv`W){8OUY5tH0!Q zNtYJ4H%HKT-k`Ue)$7->urXTO>x;VMkq7T->BXIoZbRvIsAPrFx`Y*V%H_DKXBp6H z-OK`2t61YLJ9;%(lj~K|R43h_O3&26a|MQMQS3h9EGt@fGwEVc73-QI+j9f|;$uIf zupT^;>^{*eWEw zr=tFNMaFMcC`-I+1Z?v0cWOk&7sB03h*57patwlIYfhlf9zYS&gY>`O|0asP;lNIN z#1~k^){I>0S$sbz)u0aE3hm(M)i!YfjwRc8nT@38ySOohR1Uk!j;YJWcah3jtQ;Gz zO*U&s>;1n5m_$JeqQ*2UNqYBJ1<8NIoF`AMewElD7WMa^)8Nn&_Eu*(_?O+e=bPxEUd5t()U0^~bclzT zo58`}m&sN^_iHKA#<(KY`9u1|0TvHo_6NZXkcj*Gl}fI+@Il52$?_!o2mmIKIN$a% z@aIo#Jwo{rwrn@Eonr@PQN1%<+&n%|ffHx*dk;jRWGwlb%CHpHBDBn%7&?=kKU02h z>-*K;65iUQMe1NN8ZTl)2~NG6{N5^Rte<~LNxa$>dHx@CrA4Xkpe5x@5gjezdw|16w+c^4zHJ> zB}CvDDI1j+BKK)_17Cd&p$rRlc&ST=C2n`U+ss}qRIPJ{rWf^g9guFYa-GTs*+8=* zKH`w|6My0uGZMu@44~#A&bK(sWlcif-Z}o1QMW4>=qLLt)K`rujtBm^tmoRs$CjW0 zte2)6y(eQPMo~k5(dUIp zQL0&FYfgC+S*v{VkB9q1&7_A(^^WD0Og8f?E6ewst&=bA4=4Gf)k2O>hu(dYn~z{M zzYhx~*;C^{yoj-I`RhOp-f_f`SKfn|ENg;wgRjuij-Mp23dT0ytjw|7(Fgw{+VF$+ z9yE}{%I#|&`$)>x7UUK!HI+6^r&mB%}_~5xH$RQ zTGK^UzN-dTgG`OmU&+@3A5-N8)beF{<>KQ{{k^x=>0~Dh14_`B`d}g3>mEK zfwaN9^p|%|>gC#=+JVp9Us%~NIEd_dNAfKI!Sxq94Wnr}uE!X?kL{+r!v+j}*zh`{BXkpb;L_l4>w6De09Wh3v^!*fzOqH)SC@mefX*Jk@RI|XD9NNU&dvQN zm(_|xu;+CCJ5kL(xpU8!NHA$uXYmRUMu)+MwtBnYxjjhQ2dm^4st#GXYWyA@<$Gji z!w0#$IwA|#bwf+neZ*`d|J|~gMwg66c>SfigRA@L^~S#kh-fbpKQ;2mJDu2mmh;mI z?sE2at~Ucn!Wy}*iWjS~4A1?YmXBJWyj>;s92y=vM1jq&&qIiMc9}H3VrBq^AOHgu zY7p$(=Ao#?wW@i~Pn{~q)aLtfhsIpJJVokXF$`ypxw1I-m`A|D_Wc~t9*^HKE@SE7 zD5+{sBK7jBL0F%+Hq&9q((o4#_>^@jM)hZ{%4T%#JL1UtE!YS1td zAxUz5WOAo7cZ*9@)AZ~79!hLVNZyta(H5zSo*+{qM)*?QlkB-N3C3GW6?1BhiYO}T zGi0Utk-kM0d3jC7^8KXU-7oQ8qoB2(u#lLdNp)IIq}#xQgD{&O^bng4FH14?-uNr~ z>pxY_kSIY5nVj5|e>ClibshAEI}|(UK6y|{-F_Hng_G`3&HKBva(9I?!oi9A0B5D8 zs|S7u3)(Y2$8&e#l+>8?`xTgIN?k-y>?>7bEhPbouLF1Y0~|#cw0JGfu0JJ~Id`26 zB}c z3p~|!)*^f3Cp_8t9c4&E(UJH!SS-!ja?)=cL(yFDa(x;zl)m=VoH;7pYHgzYhU6dc zNq18UTQ`A3Khegkx$YS{XykS<@94KheQv2VJe4r02DU^+lv2y`1&tXRNGRX6=?a&P z${wKBDAIJtQ3JX4ZBO(x$K&J83riblD+m5G?8V4Joz)5t;ueY|_kg_XU zg4Bke=S<+C3vnIQX(hHOGp!6Ye8%G%n#B!=EpOTzWCf5sY_XhCBYG6diV|F)RFvyL zQ+MV-FE`VVdg=%>kr~d#bHGhddiM}Z#535vDnnGWxuueRFex7PtOW)F*qU6Y?=a7L z*Ca1xc?22`TKApvd-ZburU4EHh~7QiflV-mjx51Y@PzZfh0&}JN8QxFVYe>#&$0uu{Ygxl)f7+l&V2|wIK4fZYw0xdFcpnoX_RU+m zEoP{h)r!ZXF3?qJfbm@)g=F!+1Wg$y)P$vBx(=+o)NaOM{?*d&bT%c@yOBq(sE;Es zcxM21ZIAu5pk5Byo8>K7yLN74esu{bGp%b6h@i($ghr0bZ{5F&sL{^%9-c2Kpj3ZD z;?{RkU0v>(0Js7gE(Y@s&Yg1lb)!dJLSN8;O9HR|)Ohk!e$;j46aMlCw9{8dULNR2 z%&prNDkZzpHDAw;kZ>$p@-yUL7`cr9SZ1xz78Sm)XON7wXvtTpr57$$32!KRH~?*o z{N6Gn&GOElKT;h@O{cPt9fQRn#}$tSM|K;35hBzO&9^|g9WS) zHtX@6#o>~h#i`4<_CWcA+d^;MlwW`2V5kQtxXWU~my96FX{2PMyw1s2jvCM^i2O%ojCYI2`~2&U!lXq``sFZ0)kUe3Ox z%<3h=8vw|a|3p%0XkSp`nF9TpMeuHdJ3SvBJ?XYQLu65D=0i)wC53I7n@@2sBjHlN zYRt$$kB;9~5K3a@Zc}!Tq_N9bL{rTppYMRW^en>0u|v_m(av0h<+e$|uL4vE0KRh{ zIc57k!%>Q!=?dq_-ISxm^D|7DNc-aMZoP9Og^D+A^!1e+i)y?kD3LE@0wg$sxNVf~ z=u~6yEojdD@HAjPZF5%KalwaJ@mrXc^*>dD9N^40{*bwjhgJX%YAJa}Hb&?kG}&TU=UTtnSMkk{Uya}oAFVffYU?xFTJ`su0|RqW6FqHHm1Q` zhqU^PfTdCf(;kiB@?+b}hxOqT@Z)@g28cU$r>e<@!0gH-*ioTJ#vfz(tzR3mvir)( z(o%0=T05}`mKkk{g5iK)fCsJIL`{@!*+a`)dBI0;ZXo5S!8suqw6HOocSnJ`{GmzN zyHs%LmVaBs>)Uixt2OZ}pVN=&LNu&1a>bR&H|luA7Y)uOfDa^xD$atL{##-coj=13j+|<};s(r9ze93a7wcrH!i``r73y*kHl_?2# z&C1BC%OfNgw2h5_c0+E8_pbStv)A7T{#vk&?xI2;hau7VtRM3ChJMKf#XjGn+F%zf zC2l}Av9ab)d(J~=8nC>zVL(Obr8HdHdSZv|q)Z)e2-vg=vn~!?%a3h;cg-T6aQ+pV zmg6VXE-RqnsSi_#b6BlIb?#cZh-Y&qvno9vuXx#Uk+~g{j|FLtYh4~{Rw#wPg>kW9 zo}y`pCY`Er#97P_v()Q!sl|S34nMA&*kDsCU+0A$;d8#TEouE$dBb_bth_unIO(?B z)S&Wq?*sL7#M(_a3om5GLAB!EjmG(!l>1&HZprlLKVVLcvHqSdJa z^S_7jN2KZXx_K`S9m2xdWV(h=R@GWFRNtVzq$?MMMO0zTYhc&-RHZ*WZfY?+D;fA+ zC1ba(Fe!Tj7qb+)76B{bIUGGxlEZZK;RB2}VokX;1-2sxYTdc);ui(RE=?gFk(>fo zgBw*-aHucwK;G_F{!%H)%HJ*MSZ_PATp%57qW(3${z2I-eBcBkM_|FY-sbF;*8Z3N zsxpR+<Ve+@Nde=gnf*u932x-6rcx&-~-j5A#gNG8NN-*q)g49z%siq)b$iVLfseP-l= zYlv*|PeJ)A_)!Vo+&ZP+LiuBh`q$W32olimaq4Id%@!uAsd@+g=m#PJz7msdnVdih zC04Ey&og#lUCPWnPU6%12G#qPOA!UHXM0@%#h#86>EP(VQ;9&R`D%mc%yN(6^H<15glw9b)ZB5Be)Ss#YjFWx_qMB;MDfN3a6ArC3D-RE-i2~?}0B6sW!qW?#K zX|)5wL^HFYQj%WNXQf@5ZGbbX+3TFy)e3(t5Wr@$d>ok%AiUuF64@VC{qf9fAXQJ1 z^|I0edGfxfwm?woBNI06rnliaLigLfjAvr=XFn~b-;%Xn*790eq71k%z^w$e)Kzjc zUU-nh%4l|UP=6=Mj=BE%Lot@{dP{3EL}4yXj^ei>BjhyGm7yU@Y%aFn_iqWdxJ5UF z3CWFH-BS6p?715?EMm9j;%|i2do>^Btyuen_CL#}dfvxDH_*>mftR9T-Ca9L`r zpxu!!A5Fk6THP;>E8}0AZ9)T$}ym*kly+DMR14qN94B z(|EIbqT_pY{z0VX$Q)pt4LAYCsntYjN-EUx>%a5R#0Aj7jK)bB&v;Xc_xW^mtu8z6 zxGB);UVY2(y;2P8hzIrE?oV}RSXS;cP*>BUFa=%lW&5QXV(@M(!lXUb$*;s$k>t>2Z zj>{$am*QP8?EC)sf^O-S_*-+mYb-C>RGWP?*C8zTYWIk{!*Rer1;Axj?#tGbbvti3 z3UGC;2@cl_xU!i|wG?MQ{%NuT8`xmEGsD84{$@zw?mo-z!$pESh!)WSC&Ly7cQDiHP2Je39N& zMPzGImIE8?hGYrA*%e}5UQrOVBPEWjmrxGH;&?KS5Hy#7mWWN6gPr;?PP(1{)dG;# zWS3^(+sQsv@CZH1gNMqei%jzl@OT`{L4VBF^;a*CH&8AoKRrp+#4a3n7doXceoHhYV&-_KTR0sRa_F7K1a2j0Px^xoie zl7GTZ^Le7eM=lX<_c}|fDbtiv_;F_1$wA82TKDXx)C0<#@Si?KuW8WnBpFSSO)^}} zb|a@HrbhQnwJ*s|L-S^!jTU*%003-eX*4fA(gdvDZ`Fld!*r~TQwDjW?c#ng6MpeT zy?W+ds!t)j5OEwdt~!=CKc55uvHOMIY#Y*D-yM?m&hx?hZ1twa=1uqs%}Ux!fenlU zO5cbS2+M@m6i`n7jN|xWG{?3)pBLH>)Lq*Cs+YNos_SaC8wnrgxwbBa~37I z^Et7T@sUl%P}nZZ;dhm+==}?AXvHB)8MRX0Mg?|Q#qmx;eT@rpt7jhBl4l8#AT%Ej zgYhtgjsEtBcy!gA>Gni}X46)JUcO{uCY6i#A2}8(ZJZFbZvbW0m*r}+sB?b_n*3Fn zJU9YCpOGx>hC@DkM$Gd84s7RO1fPZ5Hn`li8%U`vRFvClm#&;F&ixCZnq2Jwd_&2& zJ)WlbIP&oyU-3%}LpPywPFnwtYR~(LTk-sp2a7?O2`%|&q8YVl6_YOEdzFx22wH?i zFcj5u% z53R0t@t`@Xl%!iVj&6YNpq5pEV5+Z!F8mGOcjQSn+{{9a286=jO1mq{$}6cEbbwN- z{I*!7ZEiNW^1iFACV$YaS@jj*1%CEg!*XuY88Q~Ip_YWzn!GhNdht=Ol}>9(6od*z z@*ix~IZHXH&rxBUWbt4~U}{{LKr9RSSt+iK&cs&|8blCoi4-oFB>;E0V04a3bs<{{z1=4|3O{M_R0dE4w{j^6V*JPkaN?S;Q#?^?IKEYwmyMwjCvXKs5D5 zKHEKd3aKRJr21=&1MDC?sr0?qw)TIMp%>r=8;7-lOvjP&j9n6Oj3(J<5-nMznD> zj8CNehupfQOyfht$(Q}JZdf_o~tYnw3v4v#$yUrenEF3i$*lcac>FrZ`q`lK%JL6CdQwam?KY)@W!6f4PZ&5-PQ#=iTYS|)S7yXCEk+H~VyG8Av5daode5Rd@ z{rLQjnF@tudH35P1OMxWOVJ8!cKYgMfPE`8P4*72@~5zM`k-C3Ap>_!Jv$F~4Fxb`}q`rtpLiwbjp@nlY>D`Cmg8H}94I&(;) zKuAZ8PNqkN^?GO&t6YdUR59~XIhVmJI{CKQk{0@gbsqte^_rBpgM2=%=7xJMpA#e%YimLlNXud3QvXWZ`*V!X=Q|dHY$KEBeq3rO%*E zw~>4cX?a%RV?T<-`q41bk`7CNRLwsyd=0S2G0{5TmX~*PYlj*Y>w_q_9ORx{2bDd2 zd(hVnZ&S-EkV|swC0v1&Sc)CU-$cy4FmEaJf=Ij=NdX5)3p=cnzOr z2F^+J7Ckx9naX*Cm~^d*w_n|O%;;~RT37rF;QU4Zy;J(Vf{Y>%!0S(*eZ2GJB;yI# zEH2lV<_Xv!6c9qZB{=^!-=Zu5@T8OB!I-O?ypMnJ6S{gjG%7sMAVAKecnRoCUW*RIN=0TALM`zkjx2y-W_E%QLC#aA4Mu}@Nn335> znn4vVqt?J$M{j{^L=b0qS)?TUxclCZ`k=k8$p!_bnwS;ddot23JcA-a3*8r=04b!G zbj@_l;rBtrJ*J%9W~(EYmJBE%DQ@!S*m4Y?&Y7ehu zj1^B!Ukai3eQ-y>ygTB-#7y(zw;EHxA?G=2RHobkUfX|@T;*1_l8_iF*Y*uw*5J@1 z?4GfPWxeTi=7;z}ibE0UvSrek&8K2l)CpM)8L{ofMmPzV3vrMDYY_K1Se_QDl+0&? zu|P|Udvwc?kA`-egKg`~_G2u+(3%T4E*MTu_GY*F*M)?4$8YzoOWDa$frx%c`1eSRMl0ZP_nIk`P1hVJE$pfR29%?H_giROvy?oL^C!x{ znDeH$aOB-BSif%E#el`ReaIu0b-+SWIm#(ibRt4>y*O6PYv6@toVz!Fnyy5t1&B+)u>^c0?&Y~o}#2%BCZ zzSt=t5^IcwcUz0aNxGa@t_i25{IUVFnQVoZC%PgN5SkM!WoK~IQjAyMJ&y=R>w=&Y zDJz(~$k6b>CexV@;&}YSpXADx_cDxAOY|38(=m|SM-%f}7`$F0B%^j~K5YBOn{Ipo z)NoJc4!?}07xOWidR+fLyUAXm`Y-eOmDl#=fDRXERXYA%Tp4vK{JJNK4UaZ;F`P{x zne^@h9y0&~efDyAcAz^OMB=(#%jE%*LIF~Oz5MM{`ocJF}A8$7-JJ{BMnr3C5> zHha{)UQu(q2RDg@kP zudH@$yc(|&fBxghl))YkV*z`-+QXiyjG7p~n<;*Pc`YZ$ZDY@o7?okrsC^{1X#03h zP*&TX*mNzNPtPnElwaic?})jIrQqgtyGqQglK^xdN80{`b^R&6t=Ln7&Dr}bpIFWk z{#(LouHGe;hFxDK&rfzgtIlX80O_Xy|F^0ORT0F|r}5hgZBxa%kwwk?Bz3u3sH7lw zXeC9T(k;p808`hzkWMFXBvf#0mi1aYah#tjUR{=KT53(>XV_It3LK~{wN#e_HuO1Y zu~hhk-%*vLE$=snR1`HaFml5uXWu)U)w4Jc{C_J%pP~!KzU>A zkK_v`UUWY3u?NtTlh3dr(J9)Ypp?nlDuKV+<~sdT!x|LS0?^14Q(4x|{KH-#)P^Bg zd>v47dQAT;88m&dI+|p(U%GiGa~{+%^`RfG`Et;>+S{IqlkAg-RPyGj3eYXp_Pog% z48KpRzpC%awJAg0tk1_D^Opmrc=wDfUaDs=$ydHH3(?f`&3>Rxq+%;aOFaC$Is(rf zM$0g#}@hJP3 z{vqIr+|myfDe-?;qJI8%#oamFPrTERR}Z*nMTrb$XeM&}vP{(nQ|?(QVB`sn<#LEl zu$*=Ok-lHToS!Ph8{pZ#G=&0i25y4PFaYaBtII{pXr5oIojcVE*WqU%AO8$0ts#8+ zfD1#hPPMl3=?Bwln|%}tSIs!7jgP~$9RZpR&YWYffp_DJz75DEqEg9d)3N{TuM|wu zWz(?W2(c$$-p_M>15e_BI%t3WNf2-^Y|{6_;47RkF29xs34oB5yAemp*zmHzpbA|_ zKv{KY(iIJOb_z@mk54OtszoBZ!zoEy(~4A4q^#?CG^kj+(E)P~pd5R)nwK=TYKNBw zbm!O2G6`KOloFT7pMhK++0^sJ(@VHgpvGpSXuh>(6_Nxq z3qc3a*gUy3bt-W$I1SiQ?RuZ!9l`g{(H8>(T9?7aKm*17lb^*fxd3>sj1t?C}D2S;lKh7*75nANG?OFUEKcg_x2m ziARIG@EZ6@z9dR@XQ(-lrbfNd2Li=yiXClhz5HC+K)_2>x~)5tHgv`ji7B-JZ9Epa zymI-jiv|{ew%HBCz#$!4|My$5!TASEs4t1yfhlexNI4JGQh(I|OdBU{Og-BM^qQ2S z3orNApCIhG_`zsx`N)~S&(hkG2R+!ta^nF|ItHsOUb7#Xe7`R+cxECd)@yRuO7)+8 zP#xp{ee3~;*^{&XfB*ge%;6u>K=J_-iH48@Tr=OjHS@iqy4} zR7=KJO<4=!3}8)sq{P>M!V#^uB7i^YFM*8xx(!?{#pe#+FrrNxa;!<;kyUa4Bvh`Q z-1vvgcybQExy|6KBw}3d2Y$7q6eAz81elMeEzpK$xix!SGIVPVvKof{!fpUvbAOyl zXdkGHjyIN1Osv3cf4Tqv>^zTy3eM8JG;Bh8^|}R_;@$%RFc%WnTB3LCY$$T~>9|p* zr47OU9vE*B-R2A@_`rXhhUF46UsiNjmsrA6k{B47>h`Q-K8!9wgSeDi>>-cTaw&%` zm(QhXi{()mNQ{)D53b-S3(?@P#Oz)nBZmgR%F4roZRd6>qk$i| z9Per?nw*;IoAE^xCH79jk&6gcOd`!$;Zih<@))qQcK%vM7?&e-1P^y6bVV`WHtor^ zO0;H7fum?&|3tas_N1b?Wirl|4{Q9AiGgwTF9Kuy;5HfPWe;J!eVP{RHv!!4ZpEjS68FYJ(&7ZY1G| zvlZV%ViDc+hyP%NXNAA#)Er;IusiJvU-jm8rJ@M)X$Yv#rHmMaHbf!i_|rD0lQp(^ zs;sZ?NJ~;!I{m9ku$fo4;}A>;VIdKio0F=Op({MG_$WxYjQ<0UGrSK!!cr721<@*L z?1e4nDFOsg675UhgD&fq|D390iT<^)^mDYlY3~m#I8t<{PENHWY-2$91I|8dO&@z9 zVTBLT({;+1E{`cMDB7)g$hf*0j#O*7Wo(_hgrqoy%&OZF8K>GsuyaedKvYqCPl#a? zTw(!f@2hgH2ed%!-HCA4O$O_$WR-LCZqSJ$FM4OFZ=4)csr81 z#tZjjSlQSiS(;f4TGo@6ve?;0e^T8!qa}yTR1ga=RtGE;0R0~b}&9MQz1)Iohj7Ai+q&Pc;y#%2l_0m8A`r} z-F}HVM2&To2z|k`+a6ouK3BY{R2J87YX(2}7b(4~$|}(~Sbv!vqE2;3;$`C!N0Dz` zKjmjS!JGS6h51=Slq3C_8)vsX&-^j-4_D~Y?caTrZzBQ`-=%%eDuo^t1r9L4L43XA zO4y{3H|BNtcW$EVh9P3#mm33N)h*m8;35A0XV?{SI*z;Gj3zM~ zZ}djX_%sfxPvh+F^kVYNJp8F7(#Ja0J9|vYvcG0t&91dteI0o%D?4VPacL++%lYm! zgzhfqsP;zBPwPmfOrDz}zZOdrgmQeGld7?}6v!1S8oyFAR<1!#@@^i3&bh1U&8L-( z6Y)Wq`35M2GG%*e{u)FKac`zxnDe8bk!4X`mIgqu;^u)dg~se%7Z=T zvzUL+(Gq+qtm6A~Lt=mE#Z3M=)`9tX~u&y6`>}oiK_0`c~2-*3% zxni1_G7=+J(fd-8uG1 zQucNB5i+}AJu;5VSzbHkuFH>NXYMe7JC#7t8<(7ofp(C0a3DA~y$j~$D@7}nT2xUQ$TwJg+=^S%=D%9J< zS6jpTyoFK&bw3xdkf-u2P{fIA$9zOH!k4G|%04vmo#>9K)M}A!4Ec4S<$CzYil8>? z$)a@#gGwfDh;MQ#4q;Tp_Tf0CF$r-a{cKCb5yvJ8%C7QNLzgUp3?xb_^v?ZqQmti+O1pRN+P-+2?)c%jl;!R#*B_PDL_-zmJ&Tj=2G zK;ql&4VQ3SJz5?-wX+F1febA3h!Rb3wgg9}%tC-4{EaV!|{LUGYkNePDL#d0u?YFUG$) zDl>PY9VNruc6D3<@^5h6#2+zay0vllI65(bfW?e`P_l=Mq*lo z?dFCQd}`Ie@|h#fr{ZGIpX%R_d?e|~LkBEll+`8;+PZp4@wKev^sIZub)-1{g%*!t zi|-X{L1CVm=_T%kE2uFksznO5m~uPCf`(=pK`zOR>ZwvU;?G4`exh6#me@Qjw`{`T zaYX(+r6VjwLr$H8t$w%tQvoTD+mllV_MS3v{qX~zwVx+Fx|hlx3_-&pQCXU9ooOqTCpK--T=))9_ zSN(eJ)Rz8`zP?MG5H;qR1PHyoj$8`T6}Mi9tpaB+H@v#6!*6+0_08U~9rPwpMeRQN zTwzgtV9RczZ%!YI2G4Wq$iiV_xQQ&(ywHcUI6uRh;TfmsD+JtC>pzVC#w!&=_c4}K z2&aaLKyqaxf3y?Pl%-hfa@%jBimEu(0%uc_;T?uv_SMGN_|)z(etPq_2n*?NfeXzb-DeN!Eg2{}@U(6&gVm=h3Z9NsT;XKPUetr7uT_M&dy{Ll6 zcFggI^td4>Z8fUw4|kCfc3ppj1ql}>U-YKk_`b(v9Xy#&W-pn4gv3vZyeA|J9&1^E zKvWM2^dB(gmiAJAsG+hG#EVHQI1J!}5-z@%#Uer;H9ZlcIIgS>;N0@c zX_nkNNbY%gJA<_|huA<~M>4EB+0ea=`Jy*-c^ZT>-!U)cpbM=z68wIC44vy;e0F$o zeyL|%^HO|c)Kpqhv>u;tX%Eq7`i5xS)(a;JRA%UhwiZLZW22NEEZ@BlF}jUbi>arW zH8^+(p`xU@^G^v<3Vm1j=8m)#_b_z!%LADGcXF7>kYohq8G>|hIS+-|+2S~MBf^Z{ zMc4x&-XWr9a*a}E+|wD#VE82xvS8u#biIM%OfnUD4S#qR^%=Y4*EabH7I$?!#ah

M1uGA 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

lCQOedE%ayHtn}a8B2(^l| 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 kHzREiO)Z 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%0Du*|_wopH7_3Ofe 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

8KgnZ+(4WcQAx=xa0o_hhyQ6K~xB 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

)>>vB>TCM_0gw!!OKSd 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

ighsDa8$|KY82HY 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

xZJ+^8>-Cr)?i#>_`2j z3-w+)x68I5u6}xTQ)t@y?8ojU(~1=fAf}X=hVfVDLtboSwDc-5)2Z}k^op2?T}~?G zGI6ZD4@H~poRCexjq|%v`(Al;o&)6KPX+lY(zy!~9dWFeBKZ}rvrW3`Eak4M)2;Sr z9|RcNYFgdrCcMoI5_->H@1~Ln_}iN;M!ehOn6cv5U@Km%7ko{tWWpfxSikZRyP`fs z&E#;#h?C&(>0eViPy^Ixbz@%vsWSh{F8rdV$t>jDW~QdF^kJE>xtno9KDYXf<^JB4 zw1M^ct+Dq4r|VkXGo=;_o!a5!_1%jit0aatrl*C056j4Q@!)>nMDeO{uw_;dvjg=& z18iQKC&bmMYBK4tz|y0?YM&LU7zkEjX|E26!?8%frani1sw|JFI4VMph(z@?(HK)z z9j7EdG&3Y#CEeR@!(e$i6n;m*lSJSXYb$U~E3Ngn5C&j|4PpOWO~1sIYv`vF+5HD0 zW=?hwrW@Q#xuac|Kie^~_8aLIHk%TCXc%4CkZ~P%#v{Zp_l$$LjZUgW(GQWfwK!zw zVUhYX5XbKt1ZIHg669u-%I~Q{ugq?;7;-v8ku&Z}`nZ8_s-4-;vIX8NUCP2FZ0SnS zz}br^Z6QMndQ$-XxQTZK8M9xw3ka`Xk`r*%?xx8#88~Y?j9oq}uY@mS=3TP5usoQY zX^FShpXS1={dC!ovBW9!uhnntuI4dgV&i0WCD2r!tc%*F8-H`#b^gepv;WLAz9<;m z*2qB!M!hT5<4cP4D_(0zYFwmI@vdWzeR_T2;*svlm= z!I$+du2Jly;jL(P6^c>_R`Fj@5^em=+ZSj*qJFvj&Q5a$-|P3m^wnjoWFu6G8pNWf zldw*nA2Oo|b~s^h+BgI)tKWu6$l;qVWHo0=^Dayb;mJil^r;3-u4Jn-MyV+8xkEorwrX-h)!JgS?_fJ4YX$LD z#U8|A9q`c>evac@;NJ-K1Qp)QPcf&3P{q;o^Kcx-DRFPU*8h>5M0MX3=ybhNe8I}I zM{Q71Yq;V`eAH@X#P~qXCQ>&Yx&viKVOS;%SXxDq7(`k+WmI8l(%jl{oA*XfsWRVJ zk}vG4B(-wEBMf~~%Q52`{$bU6xc3jcvo^Q;7v60Z zMjl;0QwTcyI0!^fZ61byzCN-&Jkgq@#}GTVSEA*T+yd2@3-<5INk~YN>T8s$XTN~{ zv6Bx1J#A|zkpgqpmn7jR52rDAo)49JnyRW!8QQzsO!f55w;b+j%_Sn&EueYWw>ta= z<0le-iUM}$mBsfGiMyr42p^J%Jhilgjc8=^SdDBK_pi>qE>>kAR!#yJ9)HdPAUJid zY#LAIOve-16btiLFY|%#R=ckX;dLo;r}BCo%Q!C95qaLdXF1!JRyJwr{2>jE<)1*v67qG<{IuC7DUGh|UJRwgTt?q-?6sd(<(&*x>1+oA!k9n&gY9O+_&GL7%9I{@8l1+c;3^~!ejbr8K-dr4@ypRIeLcr>u&Ot?lpLxl9 z6 zYc;C!h?sU0yWw-0+~+H4KYH&VU^@Z)I7us6j@p;A7k{2`|Mq3zX7)c4_@{;aHl|vB z+fj4wIb9l@V;k#TGmZAvH}Fxod*|7B;oTkxbSag(z9UoWu5MOgGI0#JHbTD?<*wOpOfCQV70>20wLcc z-=^;`0>-tH)^Amk=NsmjhkCM}Up;@idxf%p^Lnw(QUfL<;gkzLCx60b;9xJ-q~6M! z(}asdfQm$5T}G?5Kx@Jyqg>@i0|s;&+q<#W`?YTVz@0QMm$!RH-PSy^J2}`4` z=V^K?wlmUT+_;WxF*~ftQPM7w#FFay5gd8$mV#DZ$LGz4;+ynImVLDTh<h;BvlSbF#SGQlD zfYslc9xk>f)pR`bfp(k>Z2Nu@Dw}`!&PRwQ5HZUK>AVWxc9ay zkX{CFGDB6Tm>rQC<4o05oEQtTOrH=Tq05L(m4}eMTohq{FEhxLkriLkh+Cs)>Cx&w z&HlNs@K9VNhssq}zY$*4^idlo28J=n57YV_exaPFweH2;?0h~P{b9AUpD+ zjF;!a+d5IYkRTHOlT_j6t#8D4H%I^GZ)9=c>B~w2Rg{iw79WEC~RHTwwMTm5lr`(c}=m*7h_ zPzZW(xeY21Iowy%yF5Q>&Rss)P*Z41&vByq_6Z;o;8YsK0EA_JQ1%9uvx8kuExMZ*{sWblR`2h7DDzaf)|s0LH(Ij^bK;wqldZsmRf$#BFNWGo0P9NUY$fE6?iRq~dspAYCGL6k^E zU9i1C^F(S1bJQ1C7ty81b4N(~T2okH8RR4|&!n-@(R-_G(;>tJSMbu2%K;5jQEIIX=hLdsf~O&=vj>;IYc#0lw_w3cDJYU#QjhSAEr#vq3;H@ z4BB<=?#g^XLMR@GaXHC@zZy9FEDky+1!zSg$m-aV^(`kYd!f|b`|YSBozLq_tYTuF zKYIh{5Klow*&W&Cp6A07@e<8TPU3Z0UWq)lb-8pFNfZV?m~J0Q99~ZBUn6Ys;h#}D zJBb!LKVKS|H)s&3+ZW6&ZgN=qF+XQbINAg`QZ?2LzxXOd@c@o7mclL2BqDc3ybGheK$1SW+#@rt53 zLFhr}iFj>^1B2{W8Ycq$?>H6HxfO(=62el&90GX|eQogcermYpH_F20xFRf(8N?IW zAqFG2xTVsdz%Bc&J)%e>yqyr&jjkht42=N~#$g*S>MT~;9TG&?j!l}O2gi-`$tnrB zKUlr;3KKKo^zD#c9ZR~(ajQ|ncKvf)luJ*L-lgbi>1jZ|O&9g{9+%04Km#;DIA7Wl z{Y@j2%A}3cr)<44gcHo7?ylXSiiQOj3K zp=fBjsWCE?CWoO|oF72!_AC43T4SVYjmBH+5FZJD!-m%fgK>Kyixn`M zaaiw52#pRsiPl#W#LvPJYU1;}AR~RY)yWz|x_C= z+pB~F(VNxgvqk@5Bt{!~_bUkCs`SCqVXz6h6?A>~y}cC59kZk1)nNN{PU7Y$S8PnG zMSxqg=|!f#;Rapgx>|>+{oV7$hIHkD!P~3zy)I=vM597NgPG}^kGd*W^A(=fOhX)W zKK{NGd2}tJh$|j`12ac_P8$*%vZL&^-iP`nB!2CdcXjyh0P&rmKGaVR9-MYmnL$g= zLH~-`;XPhUbLB2Qth)Qv|NNHlInYdS(Y>GnX(wE_Vfesi`vq`$)o7$C4;gmBS!zFg zLtl5=uk!McLP-A$54tV+w3!fy-gmv5kr&-&h3`k42im3?a-H+Yi{&3(E2q^2O7nt4 zd4y_$FK0ijDEpBKljBMFAN4lYxsio_kcsPg!!aoo&kfiz zhTIdkhh4AaZ_|xn%FPl%ajzJ;)V<2iulOAu{ic0}9Sw6xIhLyl(A(@uGzYwG7c{WQ zzHD9fcRuz#p|%r6S?$}Es%p|k2R(x)4Din}HJ+NpuqD49chJPGIW7$Y?`vVS5%aty zfAe_t%r0r&xJvy$`b31+( zwoLU60?%jX!3r1#Y_vW(Fz>{gBxGM~lJKR)vobF`ci$kFGYmD|dAxTEa&0VFdsc2u zddbgqiQ*8@5||fa^G11a>#8*$=$QfDr#{x?92B;nZz&1t0tW-B9v<-uTCSpSE0wgm zui}KA_bq@QlWw(s&^8+$rT~P5(}w@s=n2h7aK4OgdW4g8l?b~zFVf#DNtpN0u;)F) zVq9#8A&dIH`Xd`5P$8_9N>Eu|e_`OGaU8IS6mRzn>+|9ui;knWA0OloMelvQiJ&hy zklL*HTvT2{LXa+7V-3N3*(Q`JpoYoyrus8_8@UZ>e(6c{*hMBsDFlL`;Cs#OaFCbg z?M+}5x~*%o*ibmkAQp>)sQsm96!XK}7(E zY_&n_i|qBmCy;8pE_af#SPo?+R_6C9d-3Tq+BaA2Go()ilb?DJQWn0CGIo3O_FFY$ z9IE9W9x*QqK36}L7?W^jiU5{KK(?gm**ZNEcyVdA^}I+M6)==CY9dItZzAh%;L1AT zW8{l1LRe#Gk8jw?d=}YW+kmn@}Ve`4Rv34hjY$xe`KK5X`jP(hi z>)YJC))Thkjt{Q4BN*yB5Nb8P5VZ=b%Tf#sMW)M)%;!Z*!frd(4vM8(E>0rptZ`rJ zB7MuGnjg5Lp=+db8FicX4AL5rc8I_ab(sKciMb|duJ&X(nJ674@X@Rc6WHoOIiBHI z@N`TapILmN7#wGw374t_Q`P2X6kvRi^*{b@g2oX;#!ZKzwP!Mm_g%F8>6lP~PF2n>C`+uFn_ zZI1i%?U+5Yc@WdDu8MI9s|?GlLrFUU_ARtv1`*6bVeJqnrq!n&9vce7t+hb?j(B#V zB5s%So2>gv%WboE;5}d8@8g~oKZs)#tO1kvT?po7FMW5khcy8qK2L^X71bT-YgEIC zq}9O&xH2n83t_^6ltg(C4jSc!wT$~Oj_iqUMM?QmaI9SuDSa!dS zV4Q^%T6*aoOuZH9RHP0gxjGQ3A?Xg{e$K)^cH*rDph=*HE8EZFstKA7h30XtuLCC! zcor^@mB(Q}m9PHq%189>I580C4fS+cKJ&|Oiot32=d|CyS0Cl??P@o@RoRyd*WIcD zajc{Jf98B+Yv!`6D~caP`Uu^nTxTUteWY32E1@y1Sy&3#d|+yu=pftP zXqxW1^nJIsKR#e-fTzDz3tfL9HuaSwwXt`46sg~oOXdomIIL<8T(6fc&m!B?wgMQD zB{_-u1TYck6dAzdj5N|hB$LbIzDbK`>^gGY@}>v8 z2P2jrmK{Hj(?a+7TwZ-QEmJ4RorPGI^b(D$HoyAYw_z$koPS+ER)-I1FvVY~kiSyN zMzTHU6&tT<7v0gcPIND8DQDb#r*Em}^O*Fc&r3Al&ivv?XdX9mi%M?ln#!}k{HcJs z{@cN@?*sF!!*_1^#cHtAm`1B1i@wTRt+hZWyz6~yq5#pWc1F46Mu7Ctt*<;FZxea+ zxej#Wq!Uu{Dt^Yo@%BqkrzH6kAs)sqQ<|(WuT&=z+gV(FGF|#uOtw$M;y=#l+g{dq zVbrQ58eMkpzkOv*ajwu-9r+mLWUvAhazn76zmDlnEe*Bw2RxDv(_!3LXB2X^5D@*QW|V_))Y)ihqW}6g zZ&N_{u$=vnpaO4J4o|NFfmZJyle^sVCQFgD_Uu6T7sC&gNnT1T!mmlrW{0=52zL|X z`qlV4lh5I%BS#ubdT1^V<0MU(~@ktylB8CjHZu{&YXP=>&Kge0?Q_c()xjirornh!A5k&`WvAx{Hb8xz zQXWOkawYK^5xXjW>T@@iI?{4=0yZ?Y@z7&O(Tpk!%GT;;Blkxmf>E?jW}bd)#V5nP ziNn?}chz+&fSAqYv2R9fGoCK#0C1sb)CaE~^H&LQIePE4k0Nv9%&?5$yasdB-oV@S zjMTVFv@*SLVr&z*bsDmca|6|@R<>eNtYoxw=0uP-hwgq%zIfG@44jBmrwG2bs;VcB zPg^T92CE9eJ^b4BoVo^fIwR69ppB5;A>2Z!8`$}P zlJ4OV4!b5{aCfx&BDt$RY4AI^ii%)-hqp^VtTb%h`%}~KYFzpTZw2^bzozga+>G9x zmi~;(^1LH;=y7=&ULu+tDn;$4H-tUdoZ@%#Z-I!xe4mNs?tj`QEOkqpv^xt_f z`Jt~=`op@6GU#YLF9+3?8Cy?x2OE&f$}-##`ng3QzDl6{?{BLhN=_B^Gcw|2AdXyGz*jOIs ztJlbDvuWJ+S1(1U?GcEXcqdy=$shqeCYFU%MrK)A1UHRtol)-{2UuW9pFcvkVSq3@ z2=Opy#^)qw%5Nfy!>hKK0(2IdYu?U<-xTIJMd|z3En5`AQl0Bb?z*tDB)S;Z8(`dp5OK}g_FP*mnCOkd93v}z z)(GH%-g#Q&>Rv=R>c`ELcNej=MEPdW7p*?lr%9KsM2q&kO2II9jpGZEKkW%zCTe6F^e8#ix9q7}0C0^8qAX-1nR`mBZo(dcNVo zl|0D@U@4JU9JY#=S5o4ohpdXLiD~Hyo`fAsdrzamDXVSrEFlL@bSY69<30L*eW*M9 zyb<}$F{&Dt-n@&iuWvonlMaw9TLOrnf}>y22W0{$>BdwF7$30ef4Ka!8?=+IWV0)l zs4ujirhP?qWQxbq?ID(p`7osCM8KLD+@eXrj8Z9?Z$rTll$A|cP68{FT=IC*YW9Vw zIlBRPWMop5oHYNDL39l3XeE~|{`%JIB4Js`{ zdLVgLI9;b4PnpJHm$t8^&krfn=HmCANsvX2)p9C*Fiht`no&+;)+!>7afaI(WcAo- zdVJP=H&VZA(}3ixA;3p|HTTisj7thUB;}l}AFEkumKjUI8Vn5`Bg6QC2 z+V!eo5#LRoXXGN}hT$Y-4RQwrbR2ndn%bgFHf?QouLoeu}ARMv+OiwJ{Q$-w>b$`eMhb&8JT^fBuy8KjZl5#RSJ>k4=r(>#g-Ex z?ish^?MK6~mH5hh@w|=U6*?0a(Kj2q$QEzl6Be|1;4u%naSHdP)Hd+fAujpAvSUOa z#_H=VgEW{!Ov~&bodVDjO#MHCQo+71k!K5H10y1}z%t-_Gv0lDkXpm$_hLU_NGI8% z>Y*cDG+po$3?K+#C>Ogc+4+3reS^=O_U6WGiOtv~aPqeyksK38EMNvOVj&{CmDZt0 zAQz^KO&}E_Nw(T0tUAvb;}Hjb4HVVDV_SD;;l9JTB4jO`oNPLj6e=BHz*NAIPd zWD}shpkKiW-xI-PFyvo2BG7|!GC|k!>g9tJi*)E170r4S~0k#bo zafoE??bu00{YfA&qz&MQd|OCDH3Oh-hVlq7=5e#kSYRpWR?`4CeB19_Ud z&_nVij(Mq7M~%%(xFB@I=^|W;HhfC37XF9+z8vhPp^}cTF!kQ)K>x8(%RF!|bMZN} zT3W_}cb9K0fAtE6L8>%cslvS{N@w6%E$_Tt0tSifNv1E1Tl8wfM={=1 z3CjVYt|iG*Zmzoes3%!3wfrqvSuHm)fhlBO{bZkG=T(}NV!vVzw0-=PVNMmxAhFrk zLGrnJNJFZh87B(PH1kEYOAu|i1GG`;UfA+r4oB;_W>9j=y|BaoChX@v*h1h@wj<D6477u+4+5grJA%)eVQN%qFw(M$T{H1@Z1 z@86EQf6M=NBK=z)aNPUrU>sI|CKxAPb!9caUY+^wc9VN)1BZNyAAP~opUqpzDI_{P z%li%2fs9PfYJtbqhN!Cdr#B8grM|C=E}zM!?1UkVvGPJRt%xR;l;{h0S)Oy?HDA%& zHBgZFTV_2@$1MpnVNYvuZQMT$sZ4L_ZeOvF@fue>%wOu2V2vcf4`U^|0?uB7C#s{G z|A?aE17fH?yef1VS#)AKC*s3z+`(t{*h$XHsb)p4<##)G&$^;z(@b;OJ#T(>_RR^R zn3N8qxm~x@eJE>ucELfIZ?S+)Y-8CPkyt0#Of}hYJNj}@;9HDNctZ!{`mL;{Nv+M^OSD58jG?kpFbzBg5nNQ*$g4lMgw5)i?Q+d)4bpjf3 zmg9D0mGv-E)M!}ch>iTbBie=+I=L~VD>)HnY`p)`bne5(Q20a)mI}&wJDh&jDyw5l z!RpR*eJ5BQPV_PM88UaR(|K~e|6{FUH%G(nq1}mTwy764Qn9KXZ}`&RHC;DdhweF{ z0Y|nAZ&AbLByN}f^2q@j0;`WP`I3&fu1(H(Uv&7*cw>i=l2hwUb#bvRin9((S-OF< zSMRwS72TKY*VxnP{e{UbCLoTL3*WCh*Kt~_1&%utOafhS?c(1hOKX@U6BD%xR*@h3 zsE7~Pdes=Q@q2b)VEI^EY&$z7Ybod7pqDLlpO-*HeJtnBru5arHaGSSZ>|nvr^IiG zY5wN)1`K7~^n%8QvT$Mt;y&(r|Ja(la28q<=yD)v5BF19;q?I1XZfvB$nBVI{=)?f zpF5JJeQ1Fk6r{4k zjjEtMa96>xCz*RI6zt+Q>@Y6wXapphgt3rLa{}On0|aEnzLkf8*U;ZhgR6Wp0BVTC+<_#y5?TexPX#aI~UbWtBxQ#hIOty;*c>QX%g`{uO6PsfY43CsFPr1$D4YktxyR&-m z^vsoUt5ZRlnT1IPzp2Y%TWK+!!tO~yX=G5M&lEv&3QC#D-2{8}uBVD4iW8)Iav>p4 zkKu!(tffRcuY?0J{EgUB>X#M|_Du`i9o;F-3742jzYSTVA7?t*=LP5oUU^&ivmScK z9vZPuXYM*ijbYW)j%e7bQ|?phatOl<_>&3Mg4LXkVJ*zE7rb0NkFA;u+fUpktJIz@ z>bMwNcR-jtrf0L3=o>y97<59d|GXdI<2}t=n?_dx3Wa=6$~DjFcFiAkXDs%C>FX+Z zEM9o@GP65sQk_l&dGT=u=8>iX$+fI$WUr}7#RZqlMimYBQpdx@X48$mnRxC^gCpzv zvlkevewTN&u;o~^h$8{YQx#KEYe{W~;r%4X7|z=H9MQ#1!cQKay%p%`GCd}Iuk+4HeYN(UAA-dGPZ0mf!eIXv?w;~qG& zS6br;LSg;=?U*)3O)~4oLVcN!zOenc3bnNg9S{GS+HQvx~l3P5m!h^|z zCI|T_w1|m0unyiUEQH=61X6SVwbiN2^tQ9&UJBVwmi6rIS6MjKw?+<`ho-#95H7Pf%A zopSL=k*nwHoKs7Dq(f}g+l`fp+f51|Q@;a8*`8&uL?{1c%{KzWx;-hAE~SblG`3_- zyHC!67xCj(IY8#X3D4hufNR!yzrZ5(DdY|50`Bj?yOG#f_FEiGvdP6kk7pRreF|dp0CmMd67djFJ&)eMlww zvZ)Y0s_>eUnbWJnx$yNkI%2%#>};&6^)O@nB}!o9jVT?gc3uUx&Xy6sSg7*(d4MPqsA}Bv-z()oN}G+1XI3F zl^;AGCD<2RGm3B%{LaOR zdMzX5m&@0&+L~5CY_8{IC)v7wm+2;@0heT$+N9yGc6zYRFR$rCrI5fwdKPQf0yRr> zK{=F|)E^ysAlZWQSbv*dAf#&Tdo*s;#qoGwbp%L;BvNeX0>K(Za^;p) zV&v`SwdRJSu8*}4#S{WaqYvnHCB8q-jK@w zyk6|PPg}w3S!^)_q)6?MwbVxD{L-jL(qX)JpN9F|SNMz{nEyNC(Puc%zIz!Z6VKv-t8*TSVDB!Ms6#@P3q7MrHwZkhTU# ztzNA5`jfY)VquLQ)aFn)b_8lp{!G!~MchZk6iR}^LyU(M$COA>Jk0Z@QQ7?u%d(A+ zwWCDSrM-%Ed{p}O^LAT=PqT|8&y8Oh*L;+)ij~KUSiVYbQA0Oz80N=}d$Ah9Midv; zKlW%hTNNC~l5<;mHW$3{aOw^hhCzhMScR-w724E>PtUTnn=mE}cGiQA0Fk%mOJ$<21`Zmgnu^k*e$t^DjqVL zBJZ)&4%&e!Dlu+!^()DQ9mp=7B5FvIu0V-jNMdrpH!xm2*Q7PqS4qX)&av*4 zi+A$YyVWfoS8b*w#Yi}qZvCqhw_Su=d-<~0d^}H08?!~vOo$-DWWJx&V0aV^1G%oU zSFs+@+v4p^$;7XCs{1quGU~@h__IwVBx4W>&9FSX?8u_xNH*sbe5uuG&XCHI1ebub zKf?8k-oy{cWqLNVDo&{gQ$v%8XRQ+^J6&&7GZIB>UvFcI-B%Siep7(-E zhc$L}k@n2xpx3aB838p_S>pmikpZii{i=^@ATIXdA%6-z*-_Wj_<5K>aWcELR`m-@ z9R0!prS6au5Vzj?D%Mzj(OhvwPVHgzd2OYDYS`g?x(;_<<)*wz@--Wo#)>%}4vyYu zBEi&VF~F?pr;gLKk-v<`xJ#4+LLQu@Dur%<4q+(m({7f-^Wr_=KWvBWz*wE#%c{p# zw)WN*k&`2okCz=N@t z^EK&Cb{KANcc{`~Xvl$UIBl|oq~xQ6;04NsLu*PplYk!J0{LfB@QHmP?EWg!Axb`p zC_g_ft;P4u?xsU$ z^>d>`P13gKo1Fsd!R?!za082M4E_%oUYtD9x75W~64Z#e=eP`z-qvseiUr%*&%^in7$0!k4(FHZ0 zhwmV;hi<7QO4Vv$SxOY~tr=!NlGQS?*k8J;hpv%u59V>VJyxsgv5j%t@HDDrd zHubJU(_4-4&^bnOHNg-GiCQhax+tC02#<;)q9A55z}pF^%F{^?0BO!Enz_;tu2eYaNa6B|uFoo{vQqmd7ukKq zGuz|l38zsuB&%}2yf<%xPxS1Oc$J(-Nw>{*Ei0R}9Qop*Oqk@0`qi5cCPhepWMMFR zEzLH^wzbY2oq>*C9O&``A1ZWQtgq+Ia4AqIv}0BDq+6hCn_gfFi#T;g&kPv~6>YD(US@AH?M-#}lAyzRT*xgBFj zTzrf$P{KpnvxXrhwRXLX%GHh z_qK~>)t>CmP^=g87Lw(;Ft5bp+*dELQ>^+=kp2feGWBBA{ z)zk`lv>yXLSoW*g<-)v!CeNF^lN&X)lFwMNx@WSyaMe<7?i1zfN>2ZD$#S8(lO%#* zgT4_Jm-g`3dqp$9z6!_3xYLH(WBzB_2McgO?(e(Nlg?9JCZ03_eZ@vNJl5uYNfFh! z^L-Cq3VpW!9Csz2ht;3^c57=H?0vn0%`8XziCl-fEe98af;}^!Y~X+U4I%Ia&q@83;3pRbjwY)d(%doIz_< zOPCa9gA2~Ch)oFPZXGcG^u3CKd*Wne@60SY=!-qOy2_knUUxD}n4Ft+lu6NM!mB@C zMIKK#C~{mezRNExfKVjb;LdlCAI2o!XuSc!4JiAOC~9h_3RU>x8*6aVqs{PH=EU+m zjmP}X)y8wdBbF<}%PZzqP@m6wp zzgq%_gH)8`HNh$3)LC!wsvc|}mwS2W>$D>~?=I^bhiXqZc|AmVNbj=`)mSIyT0xHtzm^NDWr?Cc4pd)#lbz&ZQJ-7XcEi3syobSs^OGqv4GD>EWV@mR&gN1} zJ#+K3nrey2>ToQ&hd!W+Qa^Z-wmvc$7f|Ytp0*qH`8+WizD^co7A>HMAVI>5xhVOi z4h{9=oF;_nsnsbB?EJfYBEpAsE{gE=r-90R zO>dipWtib-xM}5)TA<#hLC4~u-%1KYw_D|LV&Z>6oATK3l=$)@cuW^pcmj|+v_O4R z;xWR4e%{=Ll$hc_GdVH-N5Uc&C@^a~Pj@*7-lQ*Ka)K;0+Q^B#-GT4bjC1(Q99ebU z$$KPI$(49xEfNI$Qos(JB&+Wi0jWst8<=DM_Y4_=7wYnN3q(!pcSug{v{woik&=Co zCnjNm$az?ok4Zh}l3Pe>ooym?O*kCs5|PW9G>C6N&D?7+P9Rue?T+!vL96D&6Ukit z_^g+=oNtmbLc6CS&>Fp|-5s~soH1Bf=dnJJGGs-$GH_;9V=f4bvptctvPv83vz{2d zK=e#;nfn-E@;(jNJMi0_d^O&>+ki}*}otd!?;>KMph?#2xK0=@3mj`oT> z;Fqr((dgIB;soFnJ!5g|V>(g=i4zJN+>9VuSvwF0avx}+%pRai7+SJ(#3{uUyRuT| zPb*}_xk4{L7>*ivxsS;8g4J2V-tI#tcgiP>)+;{bg=kjd{C(@keWNo$pRq(o_J9UX zOsbyu-g&V`&8|s0I7VQx>JS7jroPRQz_@Z7_|-(>%_H zI7}dpe+Z_}abl4E%OhvU4|asu3y*;nhH5*}*oOQpV`8~jT+k$24?V~D#R@w@ELcw9 z9V%}Y63gMYuRsdSEn@$rnpw4eDH?a4rGEO1N`VjpkCC`#?^kIX*pGKRKOu9LWJD8P zJA^RaB7jYUCeno>f*+1PF_gYdL>fj6gOpoZqUY(2M1el5ki6`+sZ|XX8nk z2NR}^93=a9p^S+f)@`z;FxZp=W*?liDzmfqBK57Cpp!baYL51Wyl~3;K6P$yuk1_G z8_SwhPNaXN#HG~SPtyvjSv6hnjGMx_i+@MO7)hPfc>tvhBKqjR9w7m8&f%J|RMEKt!<#`j2>3~sOx@|R z;eKsiNs>MZcb?HEE4P12SbM1ZV`OdDWl^KY`ch%=Bwx^MMyZ?pP9pYU)tS7v$geSU zC|!&ic=OWSDL5!6$2FxBHW{Mni#k|;EPUcXMkaTr zvo<4}1v{e^z_R}@T-JJ4o?$-xW0hNNZh>ynq%1L4Z-pKCH zhsvko7al2@I6P4-ej?0RHd}3=gV)r5ODCee!Jb#R-FPGx>&D2Mv}@=m@p)_W!}14) z@Gei+>c>;Y{ZPS0yI!`dC=b^~wg>I;%(Eq{oWZZW3nmF3Tn+Mwv-ksA+zT74v(4Xb zmtP_OIX5f!evn&5|MGwau`a<~=YD>~fL~{Tyx$UGEhZjF{{ofCSd1}Gfp1%CD`5)% zav}!Wfg3e!ZYkd5T73v;p$v1xrOV8-BKlZS2B%h+Jelkn%L9viWuj$qNT7YPvH5PBc+W1bM2TQarAo*1Q6mqUB87 z@Qy5wV6+#&*KboDVqRr7bg9;CAeN(3m%Vqsm>ZcVzM4$FH(0z#aC`lrp`46NGRb|(1= z*nFV=-+)y~|G>I!bPsb4v<1}vwTHF:\nThe is a volume name or an absolute path on the host machine, and is an absolute path in the container.", - "type": "array", - "items": { - "type": "string", - "pattern": "^[^:]+:[^:]+$" - }, - "minItems": 1, - "additionalItems": false - }, - "options": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontaineroptions", - "description": "Additional Docker container resource options. For a list of options, see https://docs.docker.com/engine/reference/commandline/create/#options.", - "type": "string" - } - }, - "required": [ - "image" - ], - "additionalProperties": false - }, - "defaults": { - "type": "object", - "properties": { - "run": { - "type": "object", - "properties": { - "shell": { - "$ref": "#/definitions/shell" - }, - "working-directory": { - "$ref": "#/definitions/working-directory" - } - }, - "minProperties": 1, - "additionalProperties": false - } - }, - "minProperties": 1, - "additionalProperties": false - }, - "env": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } - ] - }, - "minProperties": 1 - }, - "environment": { - "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment", - "description": "The environment that the job references", - "type": "object", - "properties": { - "name": { - "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#example-using-a-single-environment-name", - "description": "The name of the environment configured in the repo.", - "type": "string" - }, - "url": { - "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#example-using-environment-name-and-url", - "description": "A deployment URL", - "type": "string" - } - }, - "required": [ - "name" - ], - "additionalProperties": false - }, - "event": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows", - "type": "string", - "enum": [ - "check_run", - "check_suite", - "create", - "delete", - "deployment", - "deployment_status", - "fork", - "gollum", - "issue_comment", - "issues", - "label", - "member", - "milestone", - "page_build", - "project", - "project_card", - "project_column", - "public", - "pull_request", - "pull_request_review", - "pull_request_review_comment", - "pull_request_target", - "push", - "registry_package", - "release", - "status", - "watch", - "workflow_dispatch", - "workflow_run", - "repository_dispatch" - ] - }, - "eventObject": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ], - "additionalProperties": true - }, - "expressionSyntax": { - "type": "string", - "pattern": "^\\$\\{\\{.*\\}\\}$" - }, - "globs": { - "type": "array", - "items": { - "type": "string", - "minLength": 1 - }, - "minItems": 1, - "additionalItems": false - }, - "machine": { - "type": "string", - "enum": [ - "linux", - "macos", - "windows" - ] - }, - "name": { - "type": "string", - "pattern": "^[_a-zA-Z][a-zA-Z0-9_-]*$" - }, - "path": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestpaths", - "$ref": "#/definitions/globs", - "description": "When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags.\nThe paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet.\nYou can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow.\n- paths-ignore - Use the paths-ignore filter when you only need to exclude path names.\n- paths - Use the paths filter when you need to filter paths for positive matches and exclude paths." - }, - "ref": { - "properties": { - "branches": { - "$ref": "#/definitions/branch" - }, - "branches-ignore": { - "$ref": "#/definitions/branch" - }, - "tags": { - "$ref": "#/definitions/branch" - }, - "tags-ignore": { - "$ref": "#/definitions/branch" - }, - "paths": { - "$ref": "#/definitions/path" - }, - "paths-ignore": { - "$ref": "#/definitions/path" - } - }, - "oneOf": [ - { - "type": "object", - "allOf": [ - { - "not": { - "required": [ - "branches", - "branches-ignore" - ] - } - }, - { - "not": { - "required": [ - "tags", - "tags-ignore" - ] - } - }, - { - "not": { - "required": [ - "paths", - "paths-ignore" - ] - } - } - ] - }, - { - "type": "null" - } - ] - }, - "shell": { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell", - "description": "You can override the default shell settings in the runner's operating system using the shell keyword. You can use built-in shell keywords, or you can define a custom set of shell options.", - "type": "string", - "anyOf": [ - { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#custom-shell" - }, - { - "enum": [ - "bash", - "pwsh", - "python", - "sh", - "cmd", - "powershell" - ] - } - ] - }, - "types": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onevent_nametypes", - "description": "Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary.\nYou can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events.", - "type": "array", - "minItems": 1, - "additionalItems": false - }, - "working-directory": { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun", - "description": "Using the working-directory keyword, you can specify the working directory of where to run the command.", - "type": "string" - } - }, - "properties": { - "name": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#name", - "description": "The name of your workflow. GitHub displays the names of your workflows on your repository's actions page. If you omit this field, GitHub sets the name to the workflow's filename.", - "type": "string" - }, - "on": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#on", - "description": "The name of the GitHub event that triggers the workflow. You can provide a single event string, array of events, array of event types, or an event configuration map that schedules a workflow or restricts the execution of a workflow to specific files, tags, or branch changes. For a list of available events, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows.", - "oneOf": [ - { - "$ref": "#/definitions/event" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/event" - }, - "minItems": 1, - "additionalItems": false - }, - { - "type": "object", - "properties": { - "check_run": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#check-run-event-check_run", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the check_run event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/runs.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "rerequested", - "completed", - "requested_action" - ] - }, - "default": [ - "created", - "rerequested", - "completed", - "requested_action" - ] - } - } - }, - "check_suite": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#check-suite-event-check_suite", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the check_suite event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/suites/.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "completed", - "requested", - "rerequested" - ] - }, - "default": [ - "completed", - "requested", - "rerequested" - ] - } - } - }, - "create": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#create-event-create", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime someone creates a branch or tag, which triggers the create event. For information about the REST API, see https://developer.github.com/v3/git/refs/#create-a-reference." - }, - "delete": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#delete-event-delete", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime someone deletes a branch or tag, which triggers the delete event. For information about the REST API, see https://developer.github.com/v3/git/refs/#delete-a-reference." - }, - "deployment": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#deployment-event-deployment", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime someone creates a deployment, which triggers the deployment event. Deployments created with a commit SHA may not have a Git ref. For information about the REST API, see https://developer.github.com/v3/repos/deployments/." - }, - "deployment_status": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#deployment-status-event-deployment_status", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime a third party provides a deployment status, which triggers the deployment_status event. Deployments created with a commit SHA may not have a Git ref. For information about the REST API, see https://developer.github.com/v3/repos/deployments/#create-a-deployment-status." - }, - "fork": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#fork-event-fork", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime when someone forks a repository, which triggers the fork event. For information about the REST API, see https://developer.github.com/v3/repos/forks/#create-a-fork." - }, - "gollum": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#gollum-event-gollum", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow when someone creates or updates a Wiki page, which triggers the gollum event." - }, - "issue_comment": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#issue-comment-event-issue_comment", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the issue_comment event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/comments/.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "edited", - "deleted" - ] - }, - "default": [ - "created", - "edited", - "deleted" - ] - } - } - }, - "issues": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#issues-event-issues", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the issues event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "opened", - "edited", - "deleted", - "transferred", - "pinned", - "unpinned", - "closed", - "reopened", - "assigned", - "unassigned", - "labeled", - "unlabeled", - "locked", - "unlocked", - "milestoned", - "demilestoned" - ] - }, - "default": [ - "opened", - "edited", - "deleted", - "transferred", - "pinned", - "unpinned", - "closed", - "reopened", - "assigned", - "unassigned", - "labeled", - "unlabeled", - "locked", - "unlocked", - "milestoned", - "demilestoned" - ] - } - } - }, - "label": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#label-event-label", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the label event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/labels/.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "edited", - "deleted" - ] - }, - "default": [ - "created", - "edited", - "deleted" - ] - } - } - }, - "member": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#member-event-member", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the member event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/collaborators/.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "added", - "edited", - "deleted" - ] - }, - "default": [ - "added", - "edited", - "deleted" - ] - } - } - }, - "milestone": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#milestone-event-milestone", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the milestone event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/milestones/.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "closed", - "opened", - "edited", - "deleted" - ] - }, - "default": [ - "created", - "closed", - "opened", - "edited", - "deleted" - ] - } - } - }, - "page_build": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#page-build-event-page_build", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime someone pushes to a GitHub Pages-enabled branch, which triggers the page_build event. For information about the REST API, see https://developer.github.com/v3/repos/pages/." - }, - "project": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#project-event-project", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the project event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "updated", - "closed", - "reopened", - "edited", - "deleted" - ] - }, - "default": [ - "created", - "updated", - "closed", - "reopened", - "edited", - "deleted" - ] - } - } - }, - "project_card": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#project-card-event-project_card", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the project_card event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/cards.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "moved", - "converted", - "edited", - "deleted" - ] - }, - "default": [ - "created", - "moved", - "converted", - "edited", - "deleted" - ] - } - } - }, - "project_column": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#project-column-event-project_column", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the project_column event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/columns.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "updated", - "moved", - "deleted" - ] - }, - "default": [ - "created", - "updated", - "moved", - "deleted" - ] - } - } - }, - "public": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#public-event-public", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime someone makes a private repository public, which triggers the public event. For information about the REST API, see https://developer.github.com/v3/repos/#edit." - }, - "pull_request": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#pull-request-event-pull_request", - "$ref": "#/definitions/ref", - "description": "Runs your workflow anytime the pull_request event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls.\nNote: Workflows do not run on private base repositories when you open a pull request from a forked repository.\nWhen you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository.\nWorkflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository.\nThe permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "assigned", - "unassigned", - "labeled", - "unlabeled", - "opened", - "edited", - "closed", - "reopened", - "synchronize", - "ready_for_review", - "locked", - "unlocked", - "review_requested", - "review_request_removed" - ] - }, - "default": [ - "opened", - "synchronize", - "reopened" - ] - } - }, - "patternProperties": { - "^(branche|tag|path)s(-ignore)?$": {} - }, - "additionalProperties": false - }, - "pull_request_review": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#pull-request-review-event-pull_request_review", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the pull_request_review event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/reviews.\nNote: Workflows do not run on private base repositories when you open a pull request from a forked repository.\nWhen you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository.\nWorkflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository.\nThe permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "submitted", - "edited", - "dismissed" - ] - }, - "default": [ - "submitted", - "edited", - "dismissed" - ] - } - } - }, - "pull_request_review_comment": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#pull-request-review-comment-event-pull_request_review_comment", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime a comment on a pull request's unified diff is modified, which triggers the pull_request_review_comment event. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/comments.\nNote: Workflows do not run on private base repositories when you open a pull request from a forked repository.\nWhen you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository.\nWorkflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository.\nThe permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "created", - "edited", - "deleted" - ] - }, - "default": [ - "created", - "edited", - "deleted" - ] - } - } - }, - "pull_request_target": { - "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request_target", - "$ref": "#/definitions/ref", - "description": "This event is similar to pull_request, except that it runs in the context of the base repository of the pull request, rather than in the merge commit. This means that you can more safely make your secrets available to the workflows triggered by the pull request, because only workflows defined in the commit on the base repository are run. For example, this event allows you to create workflows that label and comment on pull requests, based on the contents of the event payload.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "assigned", - "unassigned", - "labeled", - "unlabeled", - "opened", - "edited", - "closed", - "reopened", - "synchronize", - "ready_for_review", - "locked", - "unlocked", - "review_requested", - "review_request_removed" - ] - }, - "default": [ - "opened", - "synchronize", - "reopened" - ] - } - }, - "patternProperties": { - "^(branche|tag|path)s(-ignore)?$": {} - }, - "additionalProperties": false - }, - "push": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#push-event-push", - "$ref": "#/definitions/ref", - "description": "Runs your workflow when someone pushes to a repository branch, which triggers the push event.\nNote: The webhook payload available to GitHub Actions does not include the added, removed, and modified attributes in the commit object. You can retrieve the full commit object using the REST API. For more information, see https://developer.github.com/v3/repos/commits/#get-a-single-commit.", - "patternProperties": { - "^(branche|tag|path)s(-ignore)?$": {} - }, - "additionalProperties": false - }, - "registry_package": { - "$comment": "https://help.github.com/en/actions/reference/events-that-trigger-workflows#registry-package-event-registry_package", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime a package is published or updated. For more information, see https://help.github.com/en/github/managing-packages-with-github-packages.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "published", - "updated" - ] - }, - "default": [ - "published", - "updated" - ] - } - } - }, - "release": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#release-event-release", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the release event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/releases/ in the GitHub Developer documentation.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "published", - "unpublished", - "created", - "edited", - "deleted", - "prereleased", - "released" - ] - }, - "default": [ - "published", - "unpublished", - "created", - "edited", - "deleted", - "prereleased", - "released" - ] - } - } - }, - "status": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#status-event-status", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the status of a Git commit changes, which triggers the status event. For information about the REST API, see https://developer.github.com/v3/repos/statuses/." - }, - "watch": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#watch-event-watch", - "$ref": "#/definitions/eventObject", - "description": "Runs your workflow anytime the watch event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/activity/starring/." - }, - "workflow_dispatch": { - "$comment": "https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/", - "description": "You can now create workflows that are manually triggered with the new workflow_dispatch event. You will then see a 'Run workflow' button on the Actions tab, enabling you to easily trigger a run.", - "properties": { - "inputs": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputs", - "description": "Input parameters allow you to specify data that the action expects to use during runtime. GitHub stores input parameters as environment variables. Input ids with uppercase letters are converted to lowercase during runtime. We recommended using lowercase input ids.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_id", - "description": "A string identifier to associate with the input. The value of is a map of the input's metadata. The must be a unique identifier within the inputs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _.", - "type": "object", - "properties": { - "description": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_iddescription", - "description": "A string description of the input parameter.", - "type": "string" - }, - "deprecationMessage": { - "description": "A string shown to users using the deprecated input.", - "type": "string" - }, - "required": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_idrequired", - "description": "A boolean to indicate whether the action requires the input parameter. Set to true when the parameter is required.", - "type": "boolean" - }, - "default": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_iddefault", - "description": "A string representing the default value. The default value is used when an input parameter isn't specified in a workflow file.", - "type": "string" - } - }, - "required": [ - "description", - "required" - ], - "additionalProperties": false - } - }, - "additionalProperties": false - } - } - }, - "workflow_run": { - "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_run", - "$ref": "#/definitions/eventObject", - "description": "This event occurs when a workflow run is requested or completed, and allows you to execute a workflow based on the finished result of another workflow. For example, if your pull_request workflow generates build artifacts, you can create a new workflow that uses workflow_run to analyze the results and add a comment to the original pull request.", - "properties": { - "types": { - "$ref": "#/definitions/types", - "items": { - "type": "string", - "enum": [ - "requested", - "completed" - ] - }, - "default": [ - "requested", - "completed" - ] - }, - "workflows": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "additionalItems": false - } - }, - "patternProperties": { - "^branches(-ignore)?$": {} - } - }, - "repository_dispatch": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#external-events-repository_dispatch", - "$ref": "#/definitions/eventObject", - "description": "You can use the GitHub API to trigger a webhook event called repository_dispatch when you want to trigger a workflow for activity that happens outside of GitHub. For more information, see https://developer.github.com/v3/repos/#create-a-repository-dispatch-event.\nTo trigger the custom repository_dispatch webhook event, you must send a POST request to a GitHub API endpoint and provide an event_type name to describe the activity type. To trigger a workflow run, you must also configure your workflow to use the repository_dispatch event." - }, - "schedule": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#scheduled-events-schedule", - "description": "You can schedule a workflow to run at specific UTC times using POSIX cron syntax (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07). Scheduled workflows run on the latest commit on the default or base branch. The shortest interval you can run scheduled workflows is once every 5 minutes.\nNote: GitHub Actions does not support the non-standard syntax @yearly, @monthly, @weekly, @daily, @hourly, and @reboot.\nYou can use crontab guru (https://crontab.guru/). to help generate your cron syntax and confirm what time it will run. To help you get started, there is also a list of crontab guru examples (https://crontab.guru/examples.html).", - "type": "array", - "items": { - "properties": { - "cron": { - "$comment": "https://stackoverflow.com/a/57639657/4044345", - "type": "string", - "pattern": "^(((\\d+,)+\\d+|((\\d+|\\*)\\/\\d+|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|(\\d+-\\d+)|\\d+|\\*|MON|TUE|WED|THU|FRI|SAT|SUN) ?){5,7}$" - } - }, - "additionalProperties": false - }, - "minItems": 1, - "additionalItems": false - } - }, - "additionalProperties": false - } - ] - }, - "env": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#env", - "$ref": "#/definitions/env", - "description": "A map of environment variables that are available to all jobs and steps in the workflow." - }, - "defaults": { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#defaults", - "$ref": "#/definitions/defaults", - "description": "A map of default settings that will apply to all jobs in the workflow." - }, - "jobs": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobs", - "description": "A workflow run is made up of one or more jobs. Jobs run in parallel by default. To run jobs sequentially, you can define dependencies on other jobs using the jobs..needs keyword.\nEach job runs in a fresh instance of the virtual environment specified by runs-on.\nYou can run an unlimited number of jobs as long as you are within the workflow usage limits. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_id", - "description": "Each job must have an id to associate with the job. The key job_id is a string and its value is a map of the job's configuration data. You must replace with a string that is unique to the jobs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _.", - "type": "object", - "properties": { - "name": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idname", - "description": "The name of the job displayed on GitHub.", - "type": "string" - }, - "needs": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idneeds", - "description": "Identifies any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails, all jobs that need it are skipped unless the jobs use a conditional statement that causes the job to continue.", - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/name" - }, - "minItems": 1, - "additionalItems": false - }, - { - "$ref": "#/definitions/name" - } - ] - }, - "runs-on": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idruns-on", - "description": "The type of machine to run the job on. The machine can be either a GitHub-hosted runner, or a self-hosted runner.", - "oneOf": [ - { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#github-hosted-runners", - "type": "string", - "enum": [ - "macos-10.15", - "macos-11.0", - "macos-latest", - "self-hosted", - "ubuntu-16.04", - "ubuntu-18.04", - "ubuntu-20.04", - "ubuntu-latest", - "windows-2016", - "windows-2019", - "windows-latest" - ] - }, - { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#self-hosted-runners", - "type": "array", - "anyOf": [ - { - "items": [ - { - "const": "self-hosted" - } - ] - }, - { - "items": [ - { - "const": "self-hosted" - }, - { - "$ref": "#/definitions/machine" - } - ] - }, - { - "items": [ - { - "const": "self-hosted" - }, - { - "$ref": "#/definitions/architecture" - } - ] - }, - { - "items": [ - { - "const": "self-hosted" - }, - { - "$ref": "#/definitions/machine" - }, - { - "$ref": "#/definitions/architecture" - } - ] - }, - { - "items": [ - { - "const": "self-hosted" - }, - { - "$ref": "#/definitions/architecture" - }, - { - "$ref": "#/definitions/machine" - } - ] - } - ], - "additionalItems": { - "type": "string" - } - }, - { - "$ref": "#/definitions/expressionSyntax" - } - ] - }, - "environment": { - "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment", - "description": "The environment that the job references.", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/environment" - } - ] - }, - "outputs": { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjobs_idoutputs", - "description": "A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "minProperties": 1 - }, - "env": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idenv", - "$ref": "#/definitions/env", - "description": "A map of environment variables that are available to all steps in the job." - }, - "defaults": { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_iddefaults", - "$ref": "#/definitions/defaults", - "description": "A map of default settings that will apply to all steps in the job." - }, - "if": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idif", - "description": "You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional.\nExpressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", - "type": "string" - }, - "steps": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idsteps", - "description": "A job contains a sequence of tasks called steps. Steps can run commands, run setup tasks, or run an action in your repository, a public repository, or an action published in a Docker registry. Not all steps run actions, but all actions run as a step. Each step runs in its own process in the virtual environment and has access to the workspace and filesystem. Because steps run in their own process, changes to environment variables are not preserved between steps. GitHub provides built-in steps to set up and complete a job.\n", - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsid", - "description": "A unique identifier for the step. You can use the id to reference the step in contexts. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", - "type": "string" - }, - "if": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsif", - "description": "You can use the if conditional to prevent a step from running unless a condition is met. You can use any supported context and expression to create a conditional.\nExpressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", - "type": "string" - }, - "name": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsname", - "description": "A name for your step to display on GitHub.", - "type": "string" - }, - "uses": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsuses", - "description": "Selects an action to run as part of a step in your job. An action is a reusable unit of code. You can use an action defined in the same repository as the workflow, a public repository, or in a published Docker container image (https://hub.docker.com/).\nWe strongly recommend that you include the version of the action you are using by specifying a Git ref, SHA, or Docker tag number. If you don't specify a version, it could break your workflows or cause unexpected behavior when the action owner publishes an update.\n- Using the commit SHA of a released action version is the safest for stability and security.\n- Using the specific major action version allows you to receive critical fixes and security patches while still maintaining compatibility. It also assures that your workflow should still work.\n- Using the master branch of an action may be convenient, but if someone releases a new major version with a breaking change, your workflow could break.\nSome actions require inputs that you must set using the with keyword. Review the action's README file to determine the inputs required.\nActions are either JavaScript files or Docker containers. If the action you're using is a Docker container you must run the job in a Linux virtual environment. For more details, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", - "type": "string" - }, - "run": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsrun", - "description": "Runs command-line programs using the operating system's shell. If you do not provide a name, the step name will default to the text specified in the run command.\nCommands run using non-login shells by default. You can choose a different shell and customize the shell used to run commands. For more information, see https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#using-a-specific-shell.\nEach run keyword represents a new process and shell in the virtual environment. When you provide multi-line commands, each line runs in the same shell.", - "type": "string" - }, - "working-directory": { - "$ref": "#/definitions/working-directory" - }, - "shell": { - "$ref": "#/definitions/shell" - }, - "with": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepswith", - "$ref": "#/definitions/env", - "description": "A map of the input parameters defined by the action. Each input parameter is a key/value pair. Input parameters are set as environment variables. The variable is prefixed with INPUT_ and converted to upper case.", - "properties": { - "args": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepswithargs", - "type": "string" - }, - "entrypoint": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepswithentrypoint", - "type": "string" - } - } - }, - "env": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsenv", - "$ref": "#/definitions/env", - "description": "Sets environment variables for steps to use in the virtual environment. You can also set environment variables for the entire workflow or a job." - }, - "continue-on-error": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error", - "description": "Prevents a job from failing when a step fails. Set to true to allow a job to pass when this step fails.", - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/definitions/expressionSyntax" - } - ], - "default": false - }, - "timeout-minutes": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepstimeout-minutes", - "description": "The maximum number of minutes to run the step before killing the process.", - "type": "number" - } - }, - "dependencies": { - "working-directory": [ - "run" - ], - "shell": [ - "run" - ] - }, - "additionalProperties": false - }, - "minItems": 1, - "additionalItems": false - }, - "timeout-minutes": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes", - "description": "The maximum number of minutes to let a workflow run before GitHub automatically cancels it. Default: 360", - "type": "number", - "default": 360 - }, - "strategy": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategy", - "description": "A strategy creates a build matrix for your jobs. You can define different variations of an environment to run each job in.", - "type": "object", - "properties": { - "matrix": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix", - "description": "A build matrix is a set of different configurations of the virtual environment. For example you might run a job against more than one supported version of a language, operating system, or tool. Each configuration is a copy of the job that runs and reports a status.\nYou can specify a matrix by supplying an array for the configuration options. For example, if the GitHub virtual environment supports Node.js versions 6, 8, and 10 you could specify an array of those versions in the matrix.\nWhen you define a matrix of operating systems, you must set the required runs-on keyword to the operating system of the current job, rather than hard-coding the operating system name. To access the operating system name, you can use the matrix.os context parameter to set runs-on. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", - "oneOf": [ - { - "type": "object" - }, - { - "$ref": "#/definitions/expressionSyntax" - } - ], - "patternProperties": { - "^(in|ex)clude$": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#example-including-configurations-in-a-matrix-build", - "type": "array", - "items": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/configuration" - } - }, - "minItems": 1, - "additionalItems": false - } - }, - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/definitions/configuration" - }, - "minItems": 1, - "additionalItems": false - }, - "minProperties": 1 - }, - "fail-fast": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast", - "description": "When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true", - "type": "boolean", - "default": true - }, - "max-parallel": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategymax-parallel", - "description": "The maximum number of jobs that can run simultaneously when using a matrix job strategy. By default, GitHub will maximize the number of jobs run in parallel depending on the available runners on GitHub-hosted virtual machines.", - "type": "number" - } - }, - "required": [ - "matrix" - ], - "additionalProperties": false - }, - "continue-on-error": { - "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error", - "description": "Prevents a workflow run from failing when a job fails. Set to true to allow a workflow run to pass when this job fails.", - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/definitions/expressionSyntax" - } - ] - }, - "container": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontainer", - "description": "A container to run any steps in a job that don't already specify a container. If you have steps that use both script and container actions, the container actions will run as sibling containers on the same network with the same volume mounts.\nIf you do not set a container, all steps will run directly on the host specified by runs-on unless a step refers to an action configured to run in a container.", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/container" - } - ] - }, - "services": { - "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idservices", - "description": "Additional containers to host services for a job in a workflow. These are useful for creating databases or cache services like redis. The runner on the virtual machine will automatically create a network and manage the life cycle of the service containers.\nWhen you use a service container for a job or your step uses container actions, you don't need to set port information to access the service. Docker automatically exposes all ports between containers on the same network.\nWhen both the job and the action run in a container, you can directly reference the container by its hostname. The hostname is automatically mapped to the service name.\nWhen a step does not use a container action, you must access the service using localhost and bind the ports.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/container" - } - } - }, - "required": [ - "runs-on" - ], - "additionalProperties": false - } - }, - "minProperties": 1, - "additionalProperties": false - } - }, - "required": [ - "on", - "jobs" - ], - "additionalProperties": false -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 445e3af..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2826 +0,0 @@ -{ - "name": "ghygen", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@tailwindcss/forms": "^0.5", - "@tailwindcss/typography": "^0.5", - "acorn": "^8", - "alpinejs": "^3", - "autoprefixer": "^10.2.5", - "clipboard": "^2.0.8", - "daisyui": "^2.13.6", - "highlight.js": "^11.7.0", - "highlightjs-line-numbers.js": "^2.8.0", - "postcss": "^8.2.10", - "tailwindcss": "^3" - }, - "devDependencies": { - "axios": "^1.3", - "cross-env": "^7.0", - "laravel-vite-plugin": "^0.7.4", - "lodash": "^4.17.21", - "resolve-url-loader": "^5", - "sass": "^1.32.8", - "sass-loader": "^13", - "vite": "^4.1.2" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", - "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", - "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", - "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", - "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", - "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", - "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", - "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", - "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", - "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", - "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", - "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", - "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", - "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", - "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", - "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", - "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", - "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", - "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", - "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", - "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", - "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", - "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", - "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" - } - }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", - "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==", - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true, - "peer": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/node": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.0.tgz", - "integrity": "sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==", - "dev": true, - "peer": true - }, - "node_modules/@vue/reactivity": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", - "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", - "dependencies": { - "@vue/shared": "3.1.5" - } - }, - "node_modules/@vue/shared": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", - "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alpinejs": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.12.0.tgz", - "integrity": "sha512-YENcRBA9dlwR8PsZNFMTHbmdlTNwd1BkCeivPvOzzCKHas6AfwNRsDK9UEFmE5dXTMEZjnnpCTxV8vkdpWiOCw==", - "dependencies": { - "@vue/reactivity": "~3.1.1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "peer": true - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-selector-tokenizer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", - "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/daisyui": { - "version": "2.51.6", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.51.6.tgz", - "integrity": "sha512-JRqOKayuFCmWe4X4k6Qvx1y7V/VNao8U5eTSOhusOKIzCsYqf56+TCSe4d7zmqGE0V6JiLDYAT8JeoWUeRKFCw==", - "dependencies": { - "color": "^4.2", - "css-selector-tokenizer": "^0.8.0", - "postcss-js": "^4.0.0", - "tailwindcss": "^3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/daisyui" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.1.6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.385", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.385.tgz", - "integrity": "sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true, - "peer": true - }, - "node_modules/esbuild": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", - "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "peer": true - }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "peer": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/highlightjs-line-numbers.js": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/highlightjs-line-numbers.js/-/highlightjs-line-numbers.js-2.8.0.tgz", - "integrity": "sha512-TEf1gw0c8mb8nan0QwliqS7obT4cpUd9hzsGzsZLweteNnWea/VIqy5/aQqsa5wnz9lnvmtAkS1ZtDTjB/goYQ==" - }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/laravel-vite-plugin": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.7.4.tgz", - "integrity": "sha512-NlIuXbeuI+4NZzRpWNpGHRVTwuFWessvD7QoD+o2MlyAi7qyUS4J8r4/yTlu1dl9lxcR7iKoYUmHQqZDcrw2KA==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "vite-plugin-full-reload": "^1.0.5" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.5.tgz", - "integrity": "sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/sass": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", - "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.2.tgz", - "integrity": "sha512-nrIdVAAte3B9icfBiGWvmMhT/D+eCDwnk+yA7VE/76dp/WkHX+i44Q/pfo71NYbwj0Ap+PGsn0ekOuU1WFJ2AA==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz", - "integrity": "sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vite": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.5.tgz", - "integrity": "sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-plugin-full-reload": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", - "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "picomatch": "^2.3.1" - }, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.82.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", - "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/package.json b/package.json index 6527e7c..4e934ca 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,13 @@ { "private": true, + "type": "module", "scripts": { "dev": "vite", "build": "vite build" }, "devDependencies": { - "axios": "^1.3", - "cross-env": "^7.0", - "laravel-vite-plugin": "^0.7.4", - "lodash": "^4.17.21", - "resolve-url-loader": "^5", - "sass": "^1.32.8", - "sass-loader": "^13", - "vite": "^4.1.2" - }, - "dependencies": { - "@tailwindcss/forms": "^0.5", - "@tailwindcss/typography": "^0.5", - "acorn": "^8", - "alpinejs": "^3", - "autoprefixer": "^10.2.5", - "clipboard": "^2.0.8", - "daisyui": "^2.13.6", - "highlight.js": "^11.7.0", - "highlightjs-line-numbers.js": "^2.8.0", - "postcss": "^8.2.10", - "tailwindcss": "^3" + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0", + "vite": "^5.0" } } diff --git a/phpstan.neon b/phpstan.neon deleted file mode 100644 index b5afa0f..0000000 --- a/phpstan.neon +++ /dev/null @@ -1,12 +0,0 @@ -includes: - - ./vendor/nunomaduro/larastan/extension.neon -parameters: - reportUnmatchedIgnoredErrors: false - checkMissingIterableValueType: false - ignoreErrors: - - '#Parameter .1 \$separator of function explode expects non-empty-string, string given.#' - - level: 6 - paths: - - app - diff --git a/phpunit.xml b/phpunit.xml index 76a606b..506b9a3 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,31 +1,33 @@ - ./tests/Unit + tests/Unit - ./tests/Feature + tests/Feature - + - ./app + app - + - - - - - - - - - + + + + + + + + + + + diff --git a/pint.json b/pint.json deleted file mode 100644 index 93061b6..0000000 --- a/pint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "preset": "laravel" -} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 33ad091..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/psalm.xml b/psalm.xml deleted file mode 100644 index 64c18e9..0000000 --- a/psalm.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - diff --git a/public/ghygen-github-actions-yaml-generator-laravel.png b/public/ghygen-github-actions-yaml-generator-laravel.png deleted file mode 100644 index d6f4c135244708313a5714b44297ede26a3f7cb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109581 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

M1uGA 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 X5sQ5L)8mhSZ$YUlYARGevkd(&rSqZ# diff --git a/public/ghygen-title.png b/public/ghygen-title.png deleted file mode 100644 index 5f288f6a2fbb8dd7a500300a965bbd6017b2af79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16234 zcmZ{L1z3||*YL(*)CdJ(2&0kiZUiam5)hCEQM#MaB?y9qq@uKhARSY>Q5pnBw{(pB zXT9(D|JV1AYwYHEPTeQ(XPgtQsjf(XcNY%;01zlEJTX4XBx&Wh*ir5zRZ zLfb5;8$lS>1hIhNMfY@I#RGv-GE5MjyLbE>I}teVxVJ+3#h3&?D}R21n6Sv-8;dP} zkij#S2PjJ(U9_UT!j95O!jE|fg+g`U_A3XkFo+vL-DIp7VtC!zAd3RINlKY*Mw|;A z12v@t{)7Nf_ami2CCoQp&OqJc%CfgL6fNX-uz-%K{fi-)?GM8NmKbGBpycsjiqSD@`25Jm1%2(1xf*Z!_Nc%O7-sCjaGz%qGOP@{mm{v&*aY=^vf|U zZ6XjH5hs&nEPl)4E*S(8@&f{4_9SB@V+sjR3r=I@j0;{EaRr0tl)&Hxd>P4a9d?}x zW#eaH30AsNco?&Hjw2n3!K*C!Ly>zg4H>dS>uy=G5^OmIl4IzeJ|GLagPx~9h{kbH) zftn_*oRh0Htss{G7Z1G@9xW}cgsYW}nDzsOzv$?{BmIUU^?{t)>`=Yh4GrK_E@yPcCG?Jv6K7ET`SlJxYy z82#t%7 zYe%HvV)it>Z|y57JY6YR;=2V+<%)?OPb`n_fD33FO8M_jbcp$|zmXklb`Zr!&F zq1D5@A49ACz9&TKmZn$;;`e++>^+|yQih~*7DbNICQ-gqBGJY&*ge_>$ zxb^%k-d_}A&}Lfb`ZIyU&OHSsG$b+T7r9_Uejd#0E}#=ARGcdIN9=F%Xfi%vAq>#X zL?nT4Ho>hwlU9_@JQf5d;sn_IMvdoPW~e(+Y@xATbJ{Ib69n|{SM=3Jy1wU4!4 z|D%kwfx`|h5duF;d)%CReIW^P$yGa)N|b3o8fU&#cOQuGyc92S{j)zfw6GHaVd*4v zW*pw|s=v%t8mAzyeJ(qpywJF71nle}d`$mKLFjGM;({)>t;cb*Q`P47TWP1eu z2n2BCj4qvZ2F1Sjhge?}#F=u~^~O}Fa~)Lv$R5pm@y{LrkUj`C7}xp`hrr(b#8T4A}uKd+_GL9}VB;9UfJa(mMOrpVBP6GE`6od}9#YM1QHe zt3_ExYx;%3be3b}3xMWPL<*E`shBb2)t^1&;-Q^H+HzoYsvr0G4j_mvS^G?b-Jj{W zOTl158kGOCEUoS!&J^`;$08IWn4&Q{HK-+N8R@qp4?jcvMSO9)FRFH0qne5=-p=B~ zDyeXq|4P*^qYd^9_As(ln$@^1kC3x6!rlK7}sT z(#?V4H;w(Xt;EaT7k@(p$N(}8&z}TN#pgT-%*hd^fSs@gQmhNpjJR+uQTvWB6d|BC zM-?R;|HAVbFCqtLMO-o`AQ1T6nX{Zkb36DQUd<}Hd-^Y8g^F=3Tc9k{Zm^dh7geqQXuFf9-vZP8M)-D6xolX+&C@%J+@?u-~R{6kev@)xVdIaYmEwAE>@Olm5L-#owOyUS}tCOUWdD^UTIDo8dBNbZbxM zZ@k(;k%d?0NDxxjj4YSL6*DtJeJ5q572h+$fUQD?QQBv|+U|De*R%sv$xoVRuCGM0 z*4kMCL$|Wo9nv=LLvQ~U;>OyHM3-}mW3KDE2Oxd^?foV3;3w#&BX=mL&KfWMyBrSn zX%3QWj+ja-)TW~sr`s!@xHW__U?`g7M2+M;$?lJDu3N%k-5?py!<7?B_)V$#y}&Fe%u z^LG1>Dd6eA_^_X#UdL`#KWq_j8le(h?3cnGuQB&)0lPTkib%%2#Ez7p8X-XX2SapoEy^$(d2JRWX3 zqt;MJ8G6Y8FM>C`GQBc7(mAcGODHO9{&c_^;QXe(tRhYU@Rs5HcvI|=&mW5vb|Ge2 zo{aBLexG}g-UerVUKiLBVrry%rQDV1t!JK5;V`N2HgnH7;cpp?q(Dv}WSx+P*ArSN zW@ZO?9(An|^Zh|Vvyal%v)`3-&J})PAHs_M6a3ZiVDVdWS?WIplcfR3MoUu^CExh| zR8HRRb%M}DON#EvuZ5?F(h8{`M9dEL<(z0UpUhePGzb7#v}beh`)2}=h1 zpLUr3WS3z+@FRJNO2?!0EOK)SFipma~K^>^*Iaxyh5?ZV!h( zr2_>isI>$=J!aXMz_IDfcJ%zGsb^IjnmqUsr~ihYR=Sh zm$WAsj4{J_@*1_>xs!s7AmVKV3^A=nJ8<3lRo#ymK_s5a9~J2b?~rtzL$*hTJfp9Y z({G5QjlcBg`0m%XT(-8U<~h4RR3+FWNx3X@4@`d9rm$@6y&zqQEKt$u<>a~km`rG8 z^s8hI+khKBSlSdwd>VM*+u7+PJ5L}n9NAR~!)n63q(L&+SCwP51^d9Ug2RKEg4tSU z6)GR$&YX`wl7DaZw{#^3XC(9vmSi9_tgi1M8@J?xfii4w9nO)P>s#>T9CEcWurR&j zUqiX$g8JwNbz!oqjhCihQvn%(OB1Jpuoht~F03;+aaDYgeE^Be-^!jF3q?*8XnWv! z?99EK48++pah|ba!B{Nb#13vaR@KYS^Z!Sd0@O!8rwfzQYn-6Z*K3IC8Y5;em?#++ z)~mN}h>{Cu`;+oT!PDQ1D&(Hflk3;+aD~HXzOD$)Dr7I-`K8&YU~Z_v-NqsX2Pw}R zf*bb0Tj~?LAH(iC-<>P?S#;nmU;j6cG^7QW-0~|{|7zt0@jqC)OX9)nls{bmF2nRb zC4Smw4%-!Xes1!=D$@oiNYL>hwe~CzlfL$>YwhbVq!sVwBh>!DIXADYclBG1&0hiH zeY#olHmRn_MQOWr!G+y2!_ya$x-;y)aRy`hzipL6VE}opGG;#fGf9T~$gd(HZ<=6Zvw$;a8dKW)_U8J?=N_(eEZ%O-iO+fo4E9g=|K=BE$csz+& zxls$<+=D9T%9)--QJai?%K0l3Z|VV}iZc2B(Rudrb9BxdZiG0yQ{+b(R^U2DmY$)XiE2~njoOVDXl1j)fCg1?13q?~}iOJlrwb<4S$PSZB| z0=IV;Gm}86mqG-uryNiK^th(LR_s&6P{X^KI1vEcSg%$y8RhR&uKDx$;YTsiP3Uvv z{5m(tr1BHHE+L(agYb;8I5rD~4?l$l5|~A1c}(YX9<~taCSq$v-4q7j2)v7_$eX-d zSNL$D+gijyLXyXl##_~qkFe)C^NOlS5Yd^W=JEZgyp_n{Vm>I=RN|`mF z)r4=bU!tuftxW;M?N8Mb0nx$uKepm<5LJ*Ek@Mg>g|$zpQat=VfB&%yX*MiF%st+f zg(}zqQx|pC^@L@@y+DFgY69~tZpRSl+3vsA9p5f=_X>LMuXqKBcfxQ4&tbkvz(>BjBbCBqig;jC_vxELHpWs6bE-})MH_jG&iun2w))65C z3t@u*0j5L5w?KpvT<7X-<@A9Y+ch;3YUTkir_{zbeLiWyHnM*|#^G2(^Fwp5{kZZ{ zoBZoYQPRU#yL73nElW)tEJ?o);R(T#2{~CI8>=I$NBkIDkD0`62}Iu9a1S$*Q|Zw_ zR0-cFSD7{S_;wt0q({zb-yX3wg1Lbh`@+%KOZ*jFuR4L1j&IZ^>tXv5>Ps(8-Q4gL zOD{l~Ax`h4?$P*n4T;>t(#9dzo5fALtmVCOXm9ky<9lddY{^9@uZ#{efi?hnXfvRC zU%~iAbk>S}^iy-&RuV+f^t*X=>ed(DXIzpUZQVSRD>%(b$A`xQo`#rDACB@0cT``Z z6P9K#f{PwMl>=C^izF%F%TrM%yt#h9~nZhT7^jBt5@>4|NjTH+dEL4x$B ztxj4E{jwmVYDn1mR5&b2*Qe(=o0nbxON!Vk-ut2`w4LnGCyUj2p!TePz|OUhtKbyS zrFUvV`fy*4%neXv|9AMaY4xp@2H zD!G78Dn-F9wowK~>P#;Q3WtIcQcY3M9<~4#y#QQ}j`G>0yC$|_v$YbJjf*A4Yvmv^ z&@}C4+RQLs%zboT&<5McZGvRRG90p8v6B^aIbB#{P=Op_c{Nvn>+xEWPxzUEn8_|) z{NF8uruj@21An~lciI%-db3mxnx;q7`F=Y_?l+zM2b-qBqrz)V0oQ?E-@iZoN`jq> zLvFmXlW}5tUuuxl{qZ9?K*zVMIHlN*=%T>wBe{ZeHRJPqH!Sh_`dZ~t-r6ET(pa== zK0utu_U+)i12v8<%_@0?DQ7A}bvd#vq9yf8+RuOn0btrxf1bM#0lG}i!kNI96^(Fi zDUr`=XbK=+5HMo|G$x=bzN0Xh8dQUH; zn)C+RUQb*I=)J`Y9Oc!gRg*{i%{momK6uM3xLDX)zdnyaFD^FytYva#mwI`@y?GfQ z92jgu?xc5Yyfefd|Je}DwBCa>SVdK;*v5$&B}OOuEu(LMR9sq-cIlvPDz{ zK5O&(lIheajgxI5>HZ<#80PjY!rBzAZ7YZ>R-Z7SMc7tfDv*FZA`_p1%e0??m%l<( zmy0mqczd~V!y{PC=Fo>O4lSAq0-$f713a61uZB94O1mMdFY6})W!@G>nTy?I==RQo z+WaT*QPKOywIk+{Yf8e=VylkNI6HpTabyy@))ABEUubCw3!V6ho$dK{g}yJ z<&x?b#v?^YnvvRXqyG1~*?8|Zpy ztVmtdY6d4VxQsuhH)S+Dr4IIlA?==*&1oJOZC$>i;#Hhap?R_3=NI^Z8HBoG-lL<9 z9s=B?Uc5p-^r~N@0zi)S(8QeP6-heKuG~xDEK4Y{08LbtZy?r1=^8Qo^pO+~$z{)? z4j@QtMD6>X37rh_)%xM-%+6({K7Gf-fu}uPB+g8+*~KKmr!b%Q*L)y*%K7+ohr!d+ zRG`20a4erNTQh$JjOQaW(Eq9pdzu}{_1|=i%QasFzJG!~+uIku!Y=v7s%l0ae#hE4{N9bgBo>BH# zNnjxFc8;Wb#$@C92ltk;G0I-l6PEZNfX~lRr)xRUuo! zyWGBc3%xk(l$lWmvN?atZXPH~a*r2T-1_qR&ZK$QbKgRP*~K;bb?qK~^D|XA5rNdP z^NJ6(r}v-+=KBOivr*EvPH?0{LpFr2hTrFYmz=6HQ(x6ZTx z*~?E~tL&937*GJ<17>N_M*#6*H#l36gI4LfxXslKxgRFD%-cAB3Uz=Ecb}Kkxgpg-y1! z$=~{}1qi~nrxz2*8hMt_tXVBNNMY5t6TdIP+?@ z->tfuBr;nt+Y4j+z+0j`C01cOf+=-D$yM{KTdd?Z;-0Cp&{jY;hB3io`JsYu4PTjU zQg=Bw#WofWPQCZG7F$(s7`LfG$#Du|%C#C@O>`KS0G1N{{_1agUyAxPr>L=vUF`2Z z6X3a#iib|VJ%G9EO%Y&8gN=`06s>JFlpkUJ(CupCycBdPTk&ZiloIugqYHv3Htk$W z*_yCAv}Q}iehLi|^}Pb`u_GyHH7sJT@E7vR`td&XW7q>Vej>q7)%~P9pv$_yG@HK8lLI zeRl|C@uE*y>-NfF@E$C4k#Xin2rc*p%rW>oNW?W&fr`X!YD8^W0+xCY0;2c~VNUH* zG^L6_W3$wi{VCUH8CBFCE4ok~)Y7)0u(5`RXrXQ(eez?V2re?N{eeZyQQks%St$-$ zU=hBpFjayAiAo*1BO8;~pux1sv$&5-7Nm3DKI#WQ>>u014h?ZuTj526O`?;9kdN`SaY5e z5OlqiQ<7=Wi7eV$WHlM(gnq@;c=JROeIIo5(#AeS318EmuDi>^ps?5w5KD znZ*{yZ#zy@jfp4~smu?eGlWUAtJI=CTGn*H9y(#{1xq<`TeUiNUBWcx^Aeqc5Tg`wdTdQ8 zHCXmp7LQB^v&R$VG)1cJd~%pM){O)`p9&r>17-r9&+mo3*Yy!rr1G%#f>v~R$^Vk@ zG&SCb{g-1{Zh8-1lNrE}^_dTg-TNaM(uN6XV}l-U|G=)Rd(6*HT+!TNo(c=JPltj{ z!S=^fEg?E(LO~PesZye^{aARQg$z`zKk?7bIL43P-Hk`d9Fu8Q8%nHx=8-3m=IABN zsw8tDe>q{k8uLlG_s&jz{EV-p-g~o4i_CWmN1dYZt*oTjQc~Y|=q6r)jeX_*{r4o_ zO~qCP?`Ox&tFL==<$(4gw7iN5?zJ$Y^GU(9MgMs}rg-MpT9=+fR^1vIV20Xe3clcG z_mEH}%Ae$18736-%=42JgTeHZB7?eBUfcUm!1f+&o7V>4n1`$ng&Z%5Ac~birKGSwKrt9VC1lt6_l#Ku91iq1`J|%VxVGb9d0tB%F8O2K96k` zHW0F<>~g~n@dyJQeh9y%3_S}ZDka+cQO-^WJEZo=TImgk5Z-Q zn%|AUV4jCk(}9v$I*0;_7L9rwZ^~}{nt=-y+VKWgQOM+Go#{VI+WoR*#`yk^R^mw< zq@b3(zxe7_F|;;09ooPQptN-}=*`e=b)Hu92gmlE zcUv^;GD;%yi#63bpWwXw^k4^T?wVWxWQtV5eqv^Jc%Ekcsm5~7oYrdNu=H}bj{d-* z-9>`}$BI|5qfP8J&bkPWGLwJqCjyHIxuFv^x>qRkb;n;Fn6XnyfwiP2Mx9o~yoP(PSxw&{9-)@XXte&2`ur(e3(i z;?*zFH3Y0%XX%vXnTT6vICF_ZCVcqR1b>z9d1EbKk}1kFWp#c77iF6sj2Q@rWe};S zM-HxjT&O@19`OU!dU-@Hh%3eft1UfEEa#t9gw$Y#W@bT}JI|Mnb*HI1incBCi4vUe zR7mnLRFEOCsLMePNzmOIkx$h<5TOt5>R^lN#1Un)h;Q9N_bToo-2AbT&)~xSqpl=W zO)0}Yp=2|1oMIW9Lz*pCJv?;oGe$>J#ST>IXK;zZ#Dc;nwP~6ntM*XEH)_57&YkH! zXGv|J`?Y9q_`)@~1 zoavE5sZ=N{S-{(O;7ZmX#PSMy;ua z={r_Wv=#;_7qbE;iDsApPu$z7WbD%=L%zH;vt+D@=ol{^_E^NM4I33KMjPkR6mvqF zN9SpZ^;7e^G#EO4bzy`e7OOAXOTjdui7i-rl%Xvg=~*aJ>zJ16*vgfdZOsKSj0_1& z9id!5x>rOKpzbe;m+gG~CLD4VBRdl#sf9=#T^&~|^ygs1v(kiTIu0Y)f4-EhSERB&bzc8KofBN_khDnW zc)9*YV?pWTOgQ^&xx4OHuhD+5(wd9J=kAX9OAN8Dner3Kz2lT_rm)t~ z2u!^uV$N2#A**B1Z#c{8Tca+wA)hKJ>!W2gXXdrM9QJ-spIP?D zwJ*DU5xA`sO~SQa53Mk%=&+PPjF-?3`XZw=1Cimak+kJz+_6D| z!%i8^eB;_T^vdS0`OR)iEe|?r(_d-l4!ZC5ktMNXD6+N*&=YU7`#8D_yd={OQV;ZI9a51CwPuvc2_G@73+U3Me zez3P&O~6@hH_1HBVZdT-aAV9vSZxeY{j;mqIB!a!NEVuhNo>oeswF?iOjNqBl)!bc zIP7-W=V-c``1Gng;SOhd$_(!d9EJ)TPUb< zTI7Txq|&2br|nBWZ)UfGFL-*AmnQ6)DJG=MARzveMYj*nSFbstDZ<`k2a5L>$!K5T z!~7un;fi5@@)=k}?wDC6Y}>z9Xno2~!*-Y#r5Zb^?;*@LJ!f5p8&F_F#2mhR$De(% z`?Ok)#&USkna%?Oo*v~rTwEFA4g`nAmmL`I1(0c+G#ubUs8-FF?U&O#7);A;7Mxmq z4nMLUc6ni^B zVwT~pOF^?1&sAd8i^+J0Q{sKtoLxEhW^sO~f+;KW^SMGfv$us7iq%_k7DJeN&LGa! z{fSN{Q@6ln!2HtZN-Ie`i1;C)wrbiV6*38pSW79TjAd7rC&H|tk#gr{>D#`9gl|aa zf?h_g?*&zKToful3bDACq`k3Yo=X5bbRKpQuXy<2v4#5{WbFo!bK2d|=-4Ej^JJm6<-%Q()9tWoDY| z>kcS3(S^a0c66`?g~8pRdb41dnW{gAAFtEgWmE{el+?$cSk+o5@|rbgqLzuW-c=0T zLi2j=#{D`}0Ux4T%LaB0Hv^4LmZ(=+&G&;oE24%u2-CVXG=5gRVFX&vHgDYc@>_jh~=l#b+#u_9Z6}&CtC%ArBBxY&x(y&+ z6U(_!u{4*fAx%?L6UokXZn1V-hY-%2q2~E4732>~(LPg8542H3T0!iem{qFGcRfC; z)VuhC#7FQ|67)UsM}J$`L&{KesY9ViERM~o$YEJy|dij zc>cqc>4^9=3UbBv-f54kKFGu+xxZ!96#<{ojlt)0|kJ8t?iO8+qxy5E!z{2y_DrvS$Jz2 zKO^ti`WPjysrlrz*L%5EU&sNc(23{Ski`wr0q4_7l6Q|u({nKSW?E*7VTbz2EtAOB z+P9`OQJf`Tb9c^L!RKtJnNOOtEoz6>PHfudLgBkTQ2zP*If}QOnEh^6DA(GYn;%M? zs;ltRb`1sB0&<`w#*8(zgvUo)Bt}Zv*hsHOMrH(CzQ+n*Blld;+1J`9N4B1H>voJ< z&>LHSD#L6%RU-kU54yD=3x8PsQCEV)SUkngdy_qFYc~mNJhb4o>Ms|Zw(`avKd60V zKj@biXl6GZa0eT61Ir>Fez08=$kTsso=*6{Glzu7l)LQbH6agU|7(56_;@eCnZTxR zYx2wJ3tn*>siH&WruDp{CGrJ7mt2DHeZsGb%S#FE3Kv9TJtUESPgKs^Jb@hzAdgp!T}9QenqH#7{&bVgsRuz=oF(1SF*DoaSG8 zh_5P}iNB9erI#*vhmFBS0f$h6wnx?W$wz`Bo64{$tyo`Y*Jq!Nrakoj3d7fR2upJb zAnzQ+a*VYjtvL(pF6fsAxdB`FDEJP-?#*Fe6F5JjYwHWRXhMi`ig*wnRY4IB5XY&v zheeVRr2vMR4j$bRFshjfDcYS;@ZJaA8PVqlXTmT(^j#DjPTqU#E01I}D*zPudm}#^ z>8l3^n*z7fba2ae3;eeMrKh8e2P|s1h zYXjHN@@LlZ*WNtZ&x^9tr00tG%BA=*tIRSgNQ!u`lZTyH4&2slDWe2YTfP#sSQMSY z-AHHl2i4b{r+&Vg28*jPR<(H(vBa{=-?iQUbjY_7CAt((bUGny&`NI`6tdd@x<7+* zH-7XjY{tppY)Q`gd3cG%%#Zt732F7mW;eiGZ|$0mGm~~j>K45Aubhsw_*`)HTV9buJ}Zv;xee^ z=6rDL)rG&Mj*9Pd99zX@hA z=Y;Rh=3r@0yr$6;g&7bOUZ`W=EBzXK;YjO|WicH@xnE}aQBQ(N@m~ItCZ?ki~`X-0j70^0Sa224_k7$o-54cB%c%E^3r$t2)Yw}haa4*q`At^cs zKL9e?%`e*f6Zew9Oj6aQ?z<>b6dNf9oFmunZs2(qlb2e?%v@`)DRt*f_cJ%&B;kCC zMEnILF_JKs%c}|M2oRC4VdcT*p&Jex9@>Qq)mE|!#SeQYy+;32m4;N!;mgr+25#Qx zCpA@jZVI7V8d#?OY0Dl17b7f46S%{X#r#Roq-*jOH=Ky26+8}jb9Wt~cavHyybsJ> z#mpTM7MA)L4}OBZ3KkI~NX%h4yibQkzm|n@Qit>Wo>}MD6pfi>lo}l7T(cszb%BGx zFVH!_7aNy3MC)UF_!C?skjVPizl1X%(5|QH{Fd;GEI! zA_>!QOU8m@OU>e6xY2$(+!%7#3NyqX8n7GdIwyY8;Kpl)AvoP)&z=>IT)-qt~}s3_Ol**psc9gMhRy{1pVBsI~?l zy|JW!9}f^QQ82evl4t{=n{)>$Da<#U(z7S_qvsj7?z^xfI2D~<)j{l?c)QZ^xYV~j z3@2p)yK1kfEotBLXW;$VGr3nl6AOEOopzz7?!kc>bPA;NxPQWpn=|Q!HF&07Oc(>% z4hho%cvk3z@0Lv35a|hOzNMNES`pv83>^RB_T~yeO9|6;&ZEZy=YQd)@jTS= zuGw-XG`+*FTf7GwBYMnBA8;OfFg+?&TKJ@X>Z zM)}4D>8Ly8PTd5_dUOzYqQgX@===G5Yx&DSqega4@|F#&Q{`3+&w`(|r6_%SmQVSM zY5cHP*L?_#!Z$mQFMMu3`f3hP*X*@F*Z9RSxZ~Exov-C3lvo!k9(NdALQU?jW`j2m zp0W*T9lnFV58~Tn*Xj6yJcqY$_ZxUb-wd(N_`XB zK(t_4{_vZJ*V_PMsV(YIxeS6hoQ4YtUU_LI(#!OhMLSM>ckEdL6wZ8_xLf)vR-D{3 z$j+Pad0dX9+>M>tZ-GqO0E(aTNyOyEXfW!O@>=^!3z32{c!X*~sq4G%Pt2}PyfWo3 zIsFR4%58sQAFM6;h?E_c#It!U$d33!I`qQ|_70AuUv=z^_L z<0|z=kQ1=Thhw@`%wxr>RSR5~yXBKRIXK1Jx-wU^vDCA0p)P0Ndf!(kR!SevJ@I0+ zp_}2CNC>_tfyQp}%9W9mUX!*I@nOA$mHW9Q#x_!ZD3g}P@CNp-g?P6O1fiZS&!sD# zr1)BI&31Kbwnz(s*^Q(kRp#5IsNgaSr0)YGPc6YLPuSx6Dq%R0h{M7`xrqmu&42`? zBKPGbetMaFp#M`morU&|*6Q}xFH=ovB`~6{bhri|x-|E8$;_F$+?cGlf|c53CU}sK zI}9XxGDK{!n;%c`hf;PkqoQA{+aL?8{Xi}fK5kjs8Cd=@ty zqFxUV6V{v41p^&YS8gF49Ed)3EiP4W>Hx^uP4FcEdozO)tz-a^+a^%w9;t5UCUzar zdC|g>E7ItWe{(dS2Eh17=QrV6<9;Dl9upcHL<+wjKZwqim(K~;|F*W0PlrqaMI8k& zEn8sb&7k_5k27I4Woz9tdioX|> zeC3YPGg7ly=@0Sv&4l1l)=*64Q(k9w zS#_V_;S(0*5AbF3Sm;O?H-^8)l^0S0K7zzNO;>;w5U1DnD{NM~Ax}5J{$6ccc*Dc| zpQN8XKK^kx_LEy}CTq*0Im~3YyTsLut!o0Ksy34{oEiKAQi>6`u^gXx4cXqsgkaX; z@kb0?Keg?8i1ovVapGeKSL0sR1KY+Lk zf@d;Pe#sqp%V(9;=7z!qD(s?vDmnfOB50sRXYK_<{&ljl;0 zibh*$WWg443C&=@vvR)cY>SjZvSXRd%GF4cS1OD3AI~slp*AJd>HTo${V2rhAE>90WCjfcn-pel-9zIGn zd(I8lXul^)5Tn`H{OX33#7>DBJ;&iq5!KPPQ^91%3^FdYYK)(z@VG3TWQ~nHYwER# zr7*y+?5OK$#Sp*1kdxT-Rc6fLU3AQdi1r2hB*5Y|y_}Rv_roLT`-ne2c}8SaYQ|iD-1s zNN~=P_0-9kgv~xQ6j-A?=37Rxsr$FNomL8Tim+Ob%f#2JJ8+4)yU?Wh#p!A0?3|7i`zrZ^MwkNnYuGKZr(km=hm19Nv1MC!E#8G~Lou?Fm&W_g4= z2w>n`rGbWU|8;!Af!F?9rf`jd_Hw*^W(ge-Z`eqgRA9;S!Vpu6%2Vmsjf}nfrc*B4 zABQl+>b&q~wwVDl!^{fmd51s#^(41J>~Vt1D352l-AH-VmM0^8&OAFF<=d`RnVFWh z5W%cHjqOfPPzC^_dBP#|BqvE=W@t;S&n7kZE77PX>x@qhQ=R!x zbX)l7zqasv=p;10*Rj{X)`yBGU{Pi={WYpQsm6_NwVvdxdogdPX*(=bmHc_*!@2t* z0X4icZycVG@ekels~G_VKv9+m1C_xm?dBzc7(xot86lMCf@ZHwp&{z~NgVO_`oi*t z8;-kE=d1gbLj-C>XR_C1=5FLfRwq*ac9JHf1rL}>Hv-+PkCbJ$owyr|EBv@3I8usd z`po(Sc6_}bNE`ZJvTCREM5qLFn9lAH^=2}vE{P)C=vp6Vuf_bEhe7LQxDA1gU`6!H zFk4|}j_=eNTyvS>n7u;1jap!K3KdfOY5>)d3K|O-0l|B`O5L+bB!s==B{2T04_(M! zGu@3(dub7s_p~Ghs@T)OuwJX;i=9ELL=40*y}?Lov@VR7x2B;*-C6Wu>6++QH~HN+ zBqW@Nzxt(xKn|!~4)S*to9@PznsY*~1GRiXK_*@LE!&AcZ7Bih0f<9uxznNANhj^G z6u0~yvA$GvSCd8V8nljDkns0}#yk7&n3eEnXTAP5Guy)7r3h-+_;|-l?blBp(=hk` zoo}(A1%o`KuJ@bqfS2Ufvf`Z<*In#q)}`{|EnQyvdj<5rdW?U~bFlI5K^~$!HBtW3 zCCfWi+)q|^bf?zHhtZQKWsAE-Y=gQAe*oKM?tnYrYCg3+R!ru-;^@62_kuf)bJNvg znBS(8`tf`v*zY0P@784?FY#+2*FC(Q_l}C`4Y3I#7zD=|E9K(8*4w3WHbY+G#MXZ; zOACI*hnVj<_f+jaW#kD6i;5>W%6Pe-hI4I*J@YUfN>vj%R1_&XUu7ysF3Y7hT3)DwelK@BK`RAFXPS*F?Nk1&JM zaa*qGJLGq)=?5-$?YBr{35>^^9)ii5PA0sD6hkG~;XIr3K$g+HreV`~7cuZPrjj8Fbe`xt}pVzP#xz8@GP7R;>o zu4jy}Q01o6(5a$wYn#|&;=RJM`fCj|ljl&=M43A}n%!t$u?MQO-($1T@=?+-jlTCPqyQ6;@W z)iJlDUi?v_%q|ZPSZ_e=OPjdvPV~a*XJaZuiK!F4b+9{2&8_-6k!H@{g9d2mgcm^1 zD8seWMyn^6ketL=rdZaQ?4P#uhGq7_R0ZFU@faxv_|R>6zg&es1j93sAy^r%-h0=UEm6($X{VF<{?itmZ$XXt%+ukz+Rixg-N3elg-Hlm=f+7GJ?j(NDY8s-b|h zc+qj`{dM<%WppFruUL894G>=yeM~x0AN669H)rhK+3Ew1!_O?#;s2Q`WCd+~^{upg z!d|3ELH;)yXwk=uJ(HgXv|E{|)>qpMouDZ-GM1PaTk)W}5UgeC&U=&1scOApOOT zjuS?-5%9oSa1R%;>#6d$%ql|HN13Vp!se#O{GnuLl+XXBXf&T;bMU?J8#-A0{h$AQ kmake(Kernel::class); - -$response = tap($kernel->handle( - $request = Request::capture() -))->send(); - -$kernel->terminate($request, $response); +// Bootstrap Laravel and handle the request... +(require_once __DIR__.'/../bootstrap/app.php') + ->handleRequest(Request::capture()); diff --git a/public/js/app.js.LICENSE.txt b/public/js/app.js.LICENSE.txt deleted file mode 100644 index eae386b..0000000 --- a/public/js/app.js.LICENSE.txt +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ - -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ diff --git a/public/sitemap.xml b/public/sitemap.xml deleted file mode 100644 index 25a50f9..0000000 --- a/public/sitemap.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - https://ghygen.hi-folks.dev/ - 2021-03-07T16:34:50+00:00 - - - https://ghygen.hi-folks.dev/about - 2021-03-07T16:34:50+00:00 - - diff --git a/public/web.config b/public/web.config deleted file mode 100644 index d3711d7..0000000 --- a/public/web.config +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/css/app.css b/resources/css/app.css index 85a6b15..e69de29 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,25 +0,0 @@ -@import 'tailwindcss/base'; -@import 'highlight.js/styles/a11y-light'; -@import 'tailwindcss/components'; -@import 'tailwindcss/utilities'; - - -.hljs { - @apply bg-white; -} -.hljs-ln td.hljs-ln-numbers { - @apply text-gray-400 pr-3 inline-block w-full text-right; -} -.hljs-ln td.hljs-ln-numbers div { - @apply inline-block px-2 w-full; -} -.hljs-ln td.hljs-ln-line { - @apply py-1; -} - -select[multiple] { - min-height: 6rem; -} -.label { - font-weight: bold; -} diff --git a/resources/js/app.js b/resources/js/app.js index 8d06811..e59d6a0 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1,15 +1 @@ -import('./bootstrap'); - -import Alpine from 'alpinejs'; -window.Alpine = Alpine; -Alpine.start(); - -// Highlight code blocks and line numbers -import hljs from 'highlight.js/lib/core'; -import yamlH from 'highlight.js/lib/languages/yaml' -hljs.registerLanguage('yaml', yamlH); -window.hljs = hljs; - -// Clipboard -import ClipboardJS from 'clipboard'; -new ClipboardJS('.copy-btn'); +import './bootstrap'; diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index 35ecc52..5f1390b 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -1,32 +1,4 @@ -import _ from 'lodash'; -window._ = _; - -/** - * We'll load the axios HTTP library which allows us to easily issue requests - * to our Laravel back-end. This library automatically handles sending the - * CSRF token as a header based on the value of the "XSRF" token cookie. - */ - import axios from 'axios'; window.axios = axios; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; - -/** - * Echo exposes an expressive API for subscribing to channels and listening - * for events that are broadcast by Laravel. Echo and event broadcasting - * allows your team to easily build robust real-time web applications. - */ - -// import Echo from 'laravel-echo'; - -// window.Pusher = require('pusher-js'); - -// window.Echo = new Echo({ -// broadcaster: 'pusher', -// key: process.env.MIX_PUSHER_APP_KEY, -// cluster: process.env.MIX_PUSHER_APP_CLUSTER, -// key: import.meta.env.VITE_PUSHER_APP_KEY, -//// cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER, -// forceTLS: true -// }); diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php deleted file mode 100644 index 6598e2c..0000000 --- a/resources/lang/en/auth.php +++ /dev/null @@ -1,20 +0,0 @@ - 'These credentials do not match our records.', - 'password' => 'The provided password is incorrect.', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', - -]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php deleted file mode 100644 index d481411..0000000 --- a/resources/lang/en/pagination.php +++ /dev/null @@ -1,19 +0,0 @@ - '« Previous', - 'next' => 'Next »', - -]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php deleted file mode 100644 index 2345a56..0000000 --- a/resources/lang/en/passwords.php +++ /dev/null @@ -1,22 +0,0 @@ - 'Your password has been reset!', - 'sent' => 'We have emailed your password reset link!', - 'throttled' => 'Please wait before retrying.', - 'token' => 'This password reset token is invalid.', - 'user' => "We can't find a user with that email address.", - -]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php deleted file mode 100644 index 2e2820b..0000000 --- a/resources/lang/en/validation.php +++ /dev/null @@ -1,152 +0,0 @@ - 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', - 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', - ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_equals' => 'The :attribute must be a date equal to :date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', - 'ends_with' => 'The :attribute must end with one of the following: :values.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field must have a value.', - 'gt' => [ - 'numeric' => 'The :attribute must be greater than :value.', - 'file' => 'The :attribute must be greater than :value kilobytes.', - 'string' => 'The :attribute must be greater than :value characters.', - 'array' => 'The :attribute must have more than :value items.', - ], - 'gte' => [ - 'numeric' => 'The :attribute must be greater than or equal :value.', - 'file' => 'The :attribute must be greater than or equal :value kilobytes.', - 'string' => 'The :attribute must be greater than or equal :value characters.', - 'array' => 'The :attribute must have :value items or more.', - ], - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'ipv4' => 'The :attribute must be a valid IPv4 address.', - 'ipv6' => 'The :attribute must be a valid IPv6 address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'lt' => [ - 'numeric' => 'The :attribute must be less than :value.', - 'file' => 'The :attribute must be less than :value kilobytes.', - 'string' => 'The :attribute must be less than :value characters.', - 'array' => 'The :attribute must have less than :value items.', - ], - 'lte' => [ - 'numeric' => 'The :attribute must be less than or equal :value.', - 'file' => 'The :attribute must be less than or equal :value kilobytes.', - 'string' => 'The :attribute must be less than or equal :value characters.', - 'array' => 'The :attribute must not have more than :value items.', - ], - 'max' => [ - 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', - ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', - 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', - ], - 'multiple_of' => 'The :attribute must be a multiple of :value', - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute format is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'password' => 'The password is incorrect.', - 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values are present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', - ], - 'starts_with' => 'The :attribute must start with one of the following: :values.', - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute format is invalid.', - 'uuid' => 'The :attribute must be a valid UUID.', - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => [ - 'attribute-name' => [ - 'rule-name' => 'custom-message', - ], - ], - - /* - |-------------------------------------------------------------------------- - | Custom Validation Attributes - |-------------------------------------------------------------------------- - | - | The following language lines are used to swap our attribute placeholder - | with something more reader friendly such as "E-Mail Address" instead - | of "email". This simply helps us make our message more expressive. - | - */ - - 'attributes' => [], - -]; diff --git a/resources/templates/json/laravelapp.json b/resources/templates/json/laravelapp.json deleted file mode 100644 index a6f353a..0000000 --- a/resources/templates/json/laravelapp.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "Template - Laravel application (Mysql)", - "on_push": true, - "stepDusk": false, - "stepNodejs": "1", - "databaseType": "mysql", - "mysqlVersion": "latest", - "matrixLaravel": false, - "mysqlDatabase": "mysql", - "mysqlPassword": "DB_PASSWORD", - "manual_trigger": false, - "on_pullrequest": false, - "stepGenerateKey": true, - "stepPhpVersions": [ - "8.2", - "8.1" - ], - "on_push_branches": [ - "main", - "develop", - "features/**" - ], - "stepCacheVendors": true, - "mysqlDatabaseName": "db_test_laravel", - "mysqlDatabasePort": 33306, - "mysqlPasswordType": "skip", - "postgresqlVersion": "latest", - "stepCachePackages": true, - "stepNodejsVersion": "18.x", - "stepRunMigrations": true, - "postgresqlDatabase": "postgresql", - "postgresqlPassword": "postgres", - "stepDirCodeSniffer": "app", - "stepExecutePhpunit": true, - "stepCacheNpmModules": true, - "stepEnvTemplateFile": ".env.example", - "matrixLaravelVersions": [], - "stepDirStaticAnalysis": "app", - "stepPhpVersionsString": "[ '8.2','8.1' ]", - "postgresqlDatabaseName": "db_test_laravel", - "postgresqlDatabasePort": 55432, - "postgresqlPasswordType": "hardcoded", - "stepExecuteCodeSniffer": "1", - "stepInstallCodeSniffer": true, - "on_pullrequest_branches": [ - "main", - "develop" - ], - "stepCopyEnvTemplateFile": true, - "stepExecuteStaticAnalysis": "1", - "stepFixStoragePermissions": true, - "stepInstallStaticAnalysis": true, - "matrixLaravelVersionsString": "[ ]", - "dependencyStability": [ "prefer-none" ] -} diff --git a/resources/templates/json/laravelpackage.json b/resources/templates/json/laravelpackage.json deleted file mode 100644 index 4e67a3e..0000000 --- a/resources/templates/json/laravelpackage.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "Template - Laravel package", - "on_push": true, - "stepDusk": false, - "stepNodejs": false, - "databaseType": "none", - "mysqlVersion": "latest", - "matrixLaravel": false, - "mysqlDatabase": "mysql", - "mysqlPassword": "DB_PASSWORD", - "manual_trigger": false, - "on_pullrequest": false, - "stepGenerateKey": false, - "stepPhpVersions": [ - "8.2", - "8.1" - ], - "on_push_branches": [ - "main", - "develop", - "features/**" - ], - "stepCacheVendors": false, - "mysqlDatabaseName": "db_test_laravel", - "mysqlDatabasePort": 33306, - "mysqlPasswordType": "skip", - "postgresqlVersion": "latest", - "stepCachePackages": false, - "stepNodejsVersion": "18.x", - "stepRunMigrations": false, - "postgresqlDatabase": "postgresql", - "postgresqlPassword": "postgres", - "stepDirCodeSniffer": "src", - "stepExecutePhpunit": true, - "stepCacheNpmModules": false, - "stepEnvTemplateFile": ".env.example", - "matrixLaravel": true, - "matrixLaravelVersions": ["10.*"], - "stepDirStaticAnalysis": "src", - "stepPhpVersionsString": "[ '8.2','8.1' ]", - "postgresqlDatabaseName": "db_test_laravel", - "postgresqlDatabasePort": 55432, - "postgresqlPasswordType": "hardcoded", - "stepExecuteCodeSniffer": "1", - "stepInstallCodeSniffer": true, - "on_pullrequest_branches": [ - "main", - "develop" - ], - "stepCopyEnvTemplateFile": false, - "stepExecuteStaticAnalysis": "1", - "stepFixStoragePermissions": false, - "stepInstallStaticAnalysis": true, - "matrixLaravelVersionsString": "[ '10.*' ]" - -} diff --git a/resources/templates/json/laravelpostgresql.json b/resources/templates/json/laravelpostgresql.json deleted file mode 100644 index f920077..0000000 --- a/resources/templates/json/laravelpostgresql.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "Template - Laravel app with Postgresql", - "on_push": true, - "stepDusk": false, - "stepNodejs": "1", - "databaseType": "postgresql", - "mysqlVersion": "latest", - "matrixLaravel": false, - "mysqlDatabase": "mysql", - "mysqlPassword": "DB_PASSWORD", - "manual_trigger": false, - "on_pullrequest": false, - "stepGenerateKey": true, - "stepPhpVersions": [ - "8.2", - "8.1" - ], - "on_push_branches": [ - "main", - "develop", - "features/**" - ], - "stepCacheVendors": true, - "mysqlDatabaseName": "db_test_laravel", - "mysqlDatabasePort": 33306, - "mysqlPasswordType": "skip", - "postgresqlVersion": "latest", - "stepCachePackages": true, - "stepNodejsVersion": "18.x", - "stepRunMigrations": true, - "postgresqlDatabase": "postgresql", - "postgresqlPassword": "postgres", - "stepDirCodeSniffer": "app", - "stepExecutePhpunit": true, - "stepCacheNpmModules": true, - "stepEnvTemplateFile": ".env.example", - "matrixLaravelVersions": [], - "stepDirStaticAnalysis": "app", - "stepPhpVersionsString": "[ '8.2','8.1' ]", - "postgresqlDatabaseName": "db_test_laravel", - "postgresqlDatabasePort": 55432, - "postgresqlPasswordType": "hardcoded", - "stepExecuteCodeSniffer": "1", - "stepInstallCodeSniffer": true, - "stepToolStaticAnalysis": "larastan", - "on_pullrequest_branches": [ - "main", - "develop" - ], - "stepCopyEnvTemplateFile": true, - "stepExecuteStaticAnalysis": "1", - "stepFixStoragePermissions": true, - "stepInstallStaticAnalysis": true, - "matrixLaravelVersionsString": "[ ]" -} diff --git a/resources/templates/json/phppackage.json b/resources/templates/json/phppackage.json deleted file mode 100644 index dee680b..0000000 --- a/resources/templates/json/phppackage.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "Template - PHP Package", - "on_push": true, - "stepDusk": false, - "stepNodejs": false, - "databaseType": "none", - "mysqlVersion": "latest", - "matrixLaravel": false, - "mysqlDatabase": "mysql", - "mysqlPassword": "DB_PASSWORD", - "manual_trigger": false, - "on_pullrequest": false, - "stepGenerateKey": false, - "stepPhpVersions": [ - "8.2", - "8.1" - ], - "on_push_branches": [ - "master", - "main", - "develop", - "features/**" - ], - "stepCacheVendors": false, - "mysqlDatabaseName": "db_test_laravel", - "mysqlDatabasePort": 33306, - "mysqlPasswordType": "skip", - "postgresqlVersion": "latest", - "stepCachePackages": false, - "stepNodejsVersion": "18.x", - "stepRunMigrations": false, - "postgresqlDatabase": "postgresql", - "postgresqlPassword": "postgres", - "stepDirCodeSniffer": "src", - "stepExecutePhpunit": true, - "stepCacheNpmModules": false, - "stepEnvTemplateFile": ".env.example", - "matrixLaravelVersions": [], - "stepDirStaticAnalysis": "src", - "stepPhpVersionsString": "[ '8.2','8.1' ]", - "postgresqlDatabaseName": "db_test_laravel", - "postgresqlDatabasePort": 55432, - "postgresqlPasswordType": "hardcoded", - "stepExecuteCodeSniffer": "1", - "stepInstallCodeSniffer": true, - "stepToolStaticAnalysis": "phpstan", - "on_pullrequest_branches": [ - "main", - "develop" - ], - "stepCopyEnvTemplateFile": false, - "stepExecuteStaticAnalysis": "1", - "stepFixStoragePermissions": false, - "stepInstallStaticAnalysis": true, - "matrixLaravelVersionsString": "[ ]" -} diff --git a/resources/views/action_yaml.blade.php b/resources/views/action_yaml.blade.php deleted file mode 100644 index fa1d5b5..0000000 --- a/resources/views/action_yaml.blade.php +++ /dev/null @@ -1,134 +0,0 @@ -name: {{ $name }} -@include('yaml.on') - -jobs: - laravel-tests: - runs-on: ubuntu-latest -@if ( $databaseType === "mysql" ) -@include('yaml.mysql_service') -@endif -@if ( $databaseType === "postgresql" ) -@include('yaml.postgresql_service') -@endif - - strategy: - matrix: - operating-system: [ubuntu-latest] - php-versions: {!! $stepPhpVersionsString !!} - dependency-stability: {!! $dependencyStabilityString !!} -@if ($matrixLaravel) - - laravel: {!! $matrixLaravelVersionsString !!} - include: -@foreach($matrixLaravelVersions as $lv) - - laravel: {{ $lv }} - testbench: {{ $matrixTestbenchDependencies[$lv] }} -@endforeach -@endif - - name: P$@{{ matrix.php-versions }} - L$@{{ matrix.laravel }} - $@{{ matrix.dependency-stability }} - $@{{ matrix.operating-system}} - - steps: - - uses: actions/checkout@v3 -@if ($stepNodejs) - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '{{ $stepNodejsVersion }}' -@if ($stepCacheNpmModules) - - name: Cache node_modules directory - uses: actions/cache@v3 - id: node_modules-cache - with: - path: node_modules - key: $@{{ runner.OS }}-build-$@{{ hashFiles('**/package.json') }}-$@{{ hashFiles('**/package-lock.json') }} - - name: Install NPM packages - if: steps.node_modules-cache.outputs.cache-hit != 'true' - run: npm ci -@else - - name: Install NPM packages - run: npm ci -@endif - - name: Build frontend - run: npm run development -@endif - - name: Install PHP versions - uses: shivammathur/setup-php@v2 - with: - php-version: $@{{ matrix.php-versions }} -@if ($stepCachePackages) - - name: Get Composer Cache Directory 2 - id: composer-cache - run: | - echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - uses: actions/cache@v3 - id: actions-cache - with: - path: $@{{ steps.composer-cache.outputs.dir }} - key: $@{{ runner.os }}-composer-$@{{ hashFiles('**/composer.lock') }} - restore-keys: | - $@{{ runner.os }}-composer- -@endif -@if ($stepCacheVendors) - - name: Cache PHP dependencies - uses: actions/cache@v3 - id: vendor-cache - with: - path: vendor - key: $@{{ runner.OS }}-build-$@{{ hashFiles('**/composer.lock') }} -@endif -@if ($stepCopyEnvTemplateFile) - - name: Copy .env - run: php -r "file_exists('.env') || copy('{{ $stepEnvTemplateFile }}', '.env');" -@endif -@if ($matrixLaravel) - - name: Install Laravel Dependencies - run: | - composer require "laravel/framework:$@{{ matrix.laravel }}" "orchestra/testbench:$@{{ matrix.testbench }}" --no-interaction --no-update - composer update --$@{{ matrix.dependency-stability }} --prefer-dist --no-interaction --no-suggest -@else - - name: Install Dependencies - if: steps.vendor-cache.outputs.cache-hit != 'true' - run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist -@endif - -@if (is_array($dependencyStability) && count($dependencyStability) > 0) - - name: Update Dependencies with latest stable - if: matrix.dependency-stability == 'prefer-stable' - run: composer update --prefer-stable - - name: Update Dependencies with lowest stable - if: matrix.dependency-stability == 'prefer-lowest' - run: composer update --prefer-stable --prefer-lowest -@endif - -@if ($stepGenerateKey) - - name: Generate key - run: php artisan key:generate -@endif -@if ($stepFixStoragePermissions) - - name: Directory Permissions - run: chmod -R 777 storage bootstrap/cache -@endif -@if ($stepRunMigrations) - - name: Run Migrations -@include('yaml.set_env') - - run: php artisan migrate -@endif - - - name: Show dir - run: pwd - - name: PHP Version - run: php --version - -@include('yaml.code_quality') - -@if ($stepDeployType === "ploi") -@include('yaml.deploy_ploi') -@endif -@if ($stepDeployType === "vapor") - @include('yaml.deploy_vapor') -@endif -@if ($stepDeployType === "forge") - @include('yaml.deploy_forge') -@endif diff --git a/resources/views/components/button.blade.php b/resources/views/components/button.blade.php deleted file mode 100644 index 77067e6..0000000 --- a/resources/views/components/button.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -@props([ -'onClick' => '', -'type' =>'' -] -) - diff --git a/resources/views/components/card-template.blade.php b/resources/views/components/card-template.blade.php deleted file mode 100644 index 2d6cb73..0000000 --- a/resources/views/components/card-template.blade.php +++ /dev/null @@ -1,30 +0,0 @@ -@props([ -'title' => '', -'description' => '', -'icon' => 'laravel' -] -) - -

- diff --git a/resources/views/components/daisyui/button.blade.php b/resources/views/components/daisyui/button.blade.php deleted file mode 100644 index d6a8b92..0000000 --- a/resources/views/components/daisyui/button.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@props([ - 'type' => '', - 'id' => '', - 'onClick' => '', - 'classType' => 'primary' - ] -) - - diff --git a/resources/views/components/daisyui/header.blade.php b/resources/views/components/daisyui/header.blade.php deleted file mode 100644 index 0dca40f..0000000 --- a/resources/views/components/daisyui/header.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@props([ - 'imageUrl' => '', - 'title' => '', - 'description' => '', - ] -) -
-
-
-
-
- -
-
-
-
-

{{ $title }}

-

{{ $description }}

-
-
-
diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php deleted file mode 100644 index 9444c89..0000000 --- a/resources/views/components/footer.blade.php +++ /dev/null @@ -1,104 +0,0 @@ -
diff --git a/resources/views/components/form/input-checkbox.blade.php b/resources/views/components/form/input-checkbox.blade.php deleted file mode 100644 index 8084bac..0000000 --- a/resources/views/components/form/input-checkbox.blade.php +++ /dev/null @@ -1,24 +0,0 @@ -@props([ - 'label' => 'Field', - 'id', - 'name', - 'value' => '', - 'help' => '', - 'model' => '', - ] -) - -
-
- -
-
-

{{ $help}}

- - - - - diff --git a/resources/views/components/form/input-conditional-checkbox.blade.php b/resources/views/components/form/input-conditional-checkbox.blade.php deleted file mode 100644 index e3838d7..0000000 --- a/resources/views/components/form/input-conditional-checkbox.blade.php +++ /dev/null @@ -1,27 +0,0 @@ -@props([ - 'label' => 'Field', - 'id', - 'name', - 'value' => '', - 'help' => '', - 'model' => '', -]) - -
- -
- - -
- -
- {{ $slot }} - -
-
diff --git a/resources/views/components/form/input-select.blade.php b/resources/views/components/form/input-select.blade.php deleted file mode 100644 index 39ddd48..0000000 --- a/resources/views/components/form/input-select.blade.php +++ /dev/null @@ -1,34 +0,0 @@ -@props([ -'label' => 'Field', -'id', -'name', -'value' => '', -'list' => [], -'help' => '', -'model' => '', -'multiselect' => 0, -'onChange' => '' -] -) - - - -
- - - - @if ($help !== "") -

- {{ $help }} -

- @endif -
diff --git a/resources/views/components/form/input-text.blade.php b/resources/views/components/form/input-text.blade.php deleted file mode 100644 index dfff2d2..0000000 --- a/resources/views/components/form/input-text.blade.php +++ /dev/null @@ -1,24 +0,0 @@ -@props([ - 'label' => 'Field', - 'id', - 'name', - 'value' => '', - 'help' => '', - 'model' => '', - ] -) -
-
- - - @if ($help !== "") -

- {{ $help }} -

- @endif - -
-
diff --git a/resources/views/components/icons/laravel.blade.php b/resources/views/components/icons/laravel.blade.php deleted file mode 100644 index 2e42022..0000000 --- a/resources/views/components/icons/laravel.blade.php +++ /dev/null @@ -1 +0,0 @@ -merge(['class' => '']) }} viewBox="0 0 50 52" xmlns="http://www.w3.org/2000/svg">Logomark diff --git a/resources/views/components/icons/php.blade.php b/resources/views/components/icons/php.blade.php deleted file mode 100644 index 010aa0f..0000000 --- a/resources/views/components/icons/php.blade.php +++ /dev/null @@ -1,95 +0,0 @@ -merge(['class' => '']) }} id="svg3430" version="1.1" viewBox="0 0 711.20123 383.5975" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg"> - Official PHP Logo - - - - image/svg+xml - - Official PHP Logo - - - Colin Viebrock - - - - - - - - - - - - Copyright Colin Viebrock 1997 - All rights reserved. - - - 1997 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/views/components/separator-line.blade.php b/resources/views/components/separator-line.blade.php deleted file mode 100644 index 666db47..0000000 --- a/resources/views/components/separator-line.blade.php +++ /dev/null @@ -1,4 +0,0 @@ -
- diff --git a/resources/views/components/table/link.blade.php b/resources/views/components/table/link.blade.php deleted file mode 100644 index ab6bd73..0000000 --- a/resources/views/components/table/link.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@props([ -'url' => '#', -] -) -{{ $slot }} diff --git a/resources/views/components/table/td.blade.php b/resources/views/components/table/td.blade.php deleted file mode 100644 index 1bc95a2..0000000 --- a/resources/views/components/table/td.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@props([ -'align' => 'center', -] -) - - {{ $slot }} - diff --git a/resources/views/components/table/th.blade.php b/resources/views/components/table/th.blade.php deleted file mode 100644 index c95f3b6..0000000 --- a/resources/views/components/table/th.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@props([ -'title' => '', -] -) - - {{ $slot }} - diff --git a/resources/views/components/table/title.blade.php b/resources/views/components/table/title.blade.php deleted file mode 100644 index b52ccba..0000000 --- a/resources/views/components/table/title.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -

- {{ $slot }} -

diff --git a/resources/views/configurator/about.blade.php b/resources/views/configurator/about.blade.php deleted file mode 100644 index 3ecb577..0000000 --- a/resources/views/configurator/about.blade.php +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - {{ config("app.name") }} - {{ $title }} - - - - - @vite(['resources/css/app.css', 'resources/js/app.js']) - - - - - - - - - - - - - - - - -
-
-
- -

GHYGEN

-

- {{ $title }} -

-

- {{ $description }} -

-
- -
-
-
-
-
- - - - -
-
-
-
- MySql Service -
-
- Setup Mysql Service, for launching tests. It allows execute migrations and configure environment parameters. -
-
-
- -
-
-
- - - - -
-
-
-
- Triggering Events -
-
- Select triggering events: manually or automatically, when the developer push the code on a specific branch, or a developer create a new Pull Request. -
-
-
- -
-
-
- - - - -
-
-
-
- Matrix versions -
-
- Select multiple PHP versions (8.0, 7.4, 7.3), multiple Laravel versions (8, 7, 6). -
-
-
- -
-
-
- - - - - -
-
-
-
- Quality Check -
-
- Execute PHPunit tests, Code sniffer (PSR12), Static code analysis. -
-
-
-
-
-
-
- - - -
- -
-
-
-
- - -

Ghygen allows you creating your Yaml file for GitHub Actions, for Laravel/PHP web application, so you can:

-
    -
  • select triggering events: manually or automatically, when the developer push the code on a specific branch, or a developer create a new Pull Request;
  • -
  • select branches;
  • -
  • enable caching for all vendors;
  • -
  • enable caching PHP packages;
  • -
  • select multiple PHP versions (8.0, 7.4, 7.3);
  • -
  • select multiple Laravel versions (8, 7, 6), useful if you are developing a Laravel Package and you want to test it with multiple Laravel version;
  • -
  • select Node version for NPM (npm run something);
  • -
  • caching node packages;
  • -
  • setup Mysql service;
  • -
  • run migrations;
  • -
  • execute tests via phpunit;
  • -
  • static code analysis;
  • -
  • code sniffer (via phpcs for PSR12 compatibility);
  • -
  • validate Yaml file;
  • -
  • execute Browser Test via Laravel Dusk.
  • -
-

This is a Work In Progress, we are adding new features...

-

If you want to test and use quickly this tool, I deployed the codebase (main branch) on Digital Ocean Platform:

- -

If you want to start using it locally you can clone the repo and install it following the instructions below.

-

Install

-

Clone source code, enter the new directory and perform a couple of instructions:

-
-
git clone https://github.com/Hi-Folks/gh-actions-yaml-generator.git
-cd gh-actions-yaml-generator
-cp .env.example .env
-composer install
-php artisan key:generate
-npm i
-npm run production
-
-

Then create your database and update the .env file with the right values for DB_* .

-

Once your Database is configured you can execute the migrations:

-
-
php artisan migrate
-

Start development server

-
-
php artisan serve
-
-

Open the browser to the URL: http://127.0.0.1:8000

-

Usage

-

Follow these steps:

-
    -
  • access to the form (by default the URL is http://127.0.0.1:8000 if you run php artisan serve);
  • -
  • fill the form;
  • -
  • click on "Generate Yaml File" button.
  • -
-

github-actions-generator-laravel

-

Next, copy the content of your generated Yaml in a new file in your Laravel project .github/workflows/laravel_workflow.yaml .

-

Commit and push the new file.

-

If you configured "On - Push" you will see the running Actions in your Actions section of your GitHub project.

-
-
-
-
- -
- - - - - - diff --git a/resources/views/configurator/index.blade.php b/resources/views/configurator/index.blade.php deleted file mode 100644 index 08221f1..0000000 --- a/resources/views/configurator/index.blade.php +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - {{ config("app.name") }} - {{ $title }} - - - - - @vite(['resources/css/app.css', 'resources/js/app.js']) - - - - - - - - - - - - - -
- - -
-
- - -
-
- -
- - - - - - diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php deleted file mode 100644 index 96ebc8c..0000000 --- a/resources/views/dashboard/index.blade.php +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - {{ config("app.name") }} - {{ $title }} - - - - - @vite(['resources/css/app.css', 'resources/js/app.js']) - - - - - - - - - -
-
-
- -

- {{ $title }} -

-

- {{ $description }} -

- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
- - - - - - diff --git a/resources/views/livewire/configurator-form.blade.php b/resources/views/livewire/configurator-form.blade.php deleted file mode 100644 index 643b02e..0000000 --- a/resources/views/livewire/configurator-form.blade.php +++ /dev/null @@ -1,449 +0,0 @@ -
- -
- -
-

Select a workflow template

- - - Mysql - - - Postgresql - - - - - - PHP - - - - - - Laravel Package - - - - -
-
OR compile some details...
- -
-
- @csrf -
-
- - - @error('name') {{ $message }} @enderror - - -
- On - GitHub event that triggers the workflow. -
-
- - - - - @error('onPushBranches') {{ $message }} @enderror -
-
- - - - - @error('onPullrequestBranches') {{ $message }} @enderror -
- -
-
- - -
-
-
- - - - - @error('onScheduleCron') {{ $message }} @enderror -
- - @error('onEvents')
{{ $message }}
@enderror -
-
- -
- Select Database - - - -
-
- -
- - - @error('mysqlVersion') {{ $message }} @enderror -
-
- - - @error('mysqlDatabaseName') {{ $message }} @enderror -
-
- - - @error('mysqlDatabasePort') {{ $message }} @enderror -
-
- - -
-
- - -
-
-
-
-
- -
- - - @error('postgresqlVersion') {{ $message }} @enderror -
-
- - - @error('postgresqlDatabaseName') {{ $message }} @enderror -
-
- - - @error('postgresqlDatabasePort') {{ $message }} @enderror -
-
- - -
-
- - -
-
-
- -
- -
- Caching -
-
-
- - -
-
-
-
- - -
-
- -
-
- - -
-
-
-
- -
- Environments (PHP / Node) -
-
- - -
-
- - - - -
-
-
- - > - -
-
-
-
- - - @include('livewire.form.laravel-stuff') - @include('livewire.form.code-quality') - @include('livewire.form.deploy') -
- -
-
- - Copy - - - Generate Yaml File - -
-
- -
- -
- @error('yaml') -
-
- - - - - -
-
-
- Error -
-
- {{ $message }} -
-
-
- - - - @enderror - - @if ($errors->any()) -
- There was some error during validation. Take a look about your data in the form: -
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - @foreach ($hints as $hint) - -
- -
- - - -
- -
- {{ $hint }} -
-
- @endforeach - - -
-
-
- Loading - Generating Yaml file, waiting please... -
- -
-
{{ $result }}
-
- -
diff --git a/resources/views/livewire/dashboard/daily.blade.php b/resources/views/livewire/dashboard/daily.blade.php deleted file mode 100644 index ab5a80a..0000000 --- a/resources/views/livewire/dashboard/daily.blade.php +++ /dev/null @@ -1,37 +0,0 @@ -
-
-
-
- - Daily configurations - - - - - - Date - Counts - - - - - - @foreach($daily as $date => $count) - - - {{ $date }} - - - {{ $count }} - - - - @endforeach - -
-
-
-
-
- - diff --git a/resources/views/livewire/dashboard/latest.blade.php b/resources/views/livewire/dashboard/latest.blade.php deleted file mode 100644 index 945bb0b..0000000 --- a/resources/views/livewire/dashboard/latest.blade.php +++ /dev/null @@ -1,58 +0,0 @@ -
-
-
-
- - Latest configurations - - - - - - Code - Title - Database - Updated At - Counts - - - - - - @foreach( $latest as $l) - - - {{ $l->code }} - - - {{ $l->configuration->name }} - - - - - - - {{ $l->getDatabaseType() }} - @if ($l->isMysqlService() ) - {{ $l->configuration->mysqlVersion }} - @endif - @if ($l->isPostgresqlService() ) - {{ $l->configuration->postgresqlVersion }} - @endif - - - - - {{ $l->updated_at }} - - - {{ $l->counts }} - - - @endforeach - -
-
-
-
-
diff --git a/resources/views/livewire/dashboard/metrics.blade.php b/resources/views/livewire/dashboard/metrics.blade.php deleted file mode 100644 index a575f7f..0000000 --- a/resources/views/livewire/dashboard/metrics.blade.php +++ /dev/null @@ -1,53 +0,0 @@ -
-
-
-
-
-
Unique Configurations
-
{{ $count }}
-
-
-
-
-
-
-
-
-
Total Configurations
-
{{ $total }}
-
-
-
-
-
-
-
-
-
Last 4 Hours
-
{{ $last4hours }}
-
-
-
-
-
-
-
-
-
Last 24 Hours
-
{{ $last24hours }}
-
-
-
-
-
-
-
-
-
Last 3 Days
-
{{ $last3days }}
-
-
-
-
- -
diff --git a/resources/views/livewire/dashboard/top.blade.php b/resources/views/livewire/dashboard/top.blade.php deleted file mode 100644 index 5b3785f..0000000 --- a/resources/views/livewire/dashboard/top.blade.php +++ /dev/null @@ -1,61 +0,0 @@ -
- -
- -
- -
- - Most used configurations - - - - - - Code - Title - Database - Updated At - Counts - - - - - - @foreach( $top as $l) - - - {{ $l->code }} - - - {{ $l->configuration->name }} - - - - - - {{ $l->getDatabaseType() }} - @if ($l->isMysqlService() ) - {{ $l->configuration->mysqlVersion }} - @endif - @if ($l->isPostgresqlService() ) - {{ $l->configuration->postgresqlVersion }} - @endif - - - - - - {{ $l->updated_at }} - - - {{ $l->counts }} - - - @endforeach - -
-
-
-
-
diff --git a/resources/views/livewire/form/code-quality.blade.php b/resources/views/livewire/form/code-quality.blade.php deleted file mode 100644 index 3dd40ef..0000000 --- a/resources/views/livewire/form/code-quality.blade.php +++ /dev/null @@ -1,134 +0,0 @@ -
- Code Quality -
-
-
- - -
-
-
-
- - -
-
- -
-
- - -
-
- - -
-
- - -
-
- - - -
- - - - - - - -
- -
- - - > - - - - -
- - - - -
-
- - -
- -
- -
- - - -
-
diff --git a/resources/views/livewire/form/deploy.blade.php b/resources/views/livewire/form/deploy.blade.php deleted file mode 100644 index 6447137..0000000 --- a/resources/views/livewire/form/deploy.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -
- Deployment (Experimental feature) - - - -
-
- -
- - -
-
- - -
-
-
-
-
-
- You need to set a GitHub Secret in settings/secrets/actions/new named VAPOR_API_TOKEN. -
- Take a look the documentation about Laravel Vapor, Deploying From CI -
-
-
- -
-
-
- You need to set some GitHub Secrets ("GitHub > Project Settings > Secrets"): - FORGE_API_TOKEN and SSH_PRIVATE_KEY. -
- Take a look the documentation about Forge, deploy with Forge CLI. - -
- - -
-
- - -
-
-
-
- -
diff --git a/resources/views/livewire/form/laravel-stuff.blade.php b/resources/views/livewire/form/laravel-stuff.blade.php deleted file mode 100644 index d756e0f..0000000 --- a/resources/views/livewire/form/laravel-stuff.blade.php +++ /dev/null @@ -1,74 +0,0 @@ -
- Laravel stuff -
-
- - - - - - - -
-
- - - - -
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..abe98dc --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,172 @@ + + + + + + + Laravel + + + + + + + + + + + + diff --git a/resources/views/yaml/code_quality.blade.php b/resources/views/yaml/code_quality.blade.php deleted file mode 100644 index 2ae556d..0000000 --- a/resources/views/yaml/code_quality.blade.php +++ /dev/null @@ -1,90 +0,0 @@ -# Code quality -@if ($stepExecutePhpunit) - - name: Execute tests (Unit and Feature tests) via PHPUnit -@include('yaml.set_env') - - run: vendor/bin/phpunit --testdox -@endif - -@if ($stepExecutePestphp) - - name: Execute tests (Unit and Feature tests) via PestPHP -@include('yaml.set_env') - - run: vendor/bin/pest -@endif - -@if ($stepSecurityCheck) - - uses: symfonycorp/security-checker-action@v4 -@endif - -@if ($stepExecuteCodeSniffer) - - name: Execute Code Sniffer via phpcs - run: | -@if ($stepInstallCodeSniffer) - composer require --dev squizlabs/php_codesniffer -@endif - vendor/bin/phpcs --standard=PSR12 {{ $stepDirCodeSniffer }} -@endif - -@if ($stepExecuteStaticAnalysis) -@if ($stepToolStaticAnalysis == 'larastan') - - name: Execute Code Static Analysis (PHP Stan + Larastan) - run: | -@if ($stepInstallStaticAnalysis) - composer require --dev nunomaduro/larastan -@endif -@if ($stepPhpstanUseNeon) - vendor/bin/phpstan analyse -c ./phpstan.neon --no-progress -@else - vendor/bin/phpstan analyse {{ $stepDirStaticAnalysis }} -c ./vendor/nunomaduro/larastan/extension.neon --level=4 --no-progress -@endif -@elseif ($stepToolStaticAnalysis == 'psalmlaravel') - - name: Execute Code Static Analysis (PSALM) - run: | -@if ($stepInstallStaticAnalysis) - composer require --dev vimeo/psalm - ./vendor/bin/psalm --init - composer require --dev psalm/plugin-laravel - ./vendor/bin/psalm-plugin enable psalm/plugin-laravel -@endif -@if (! $stepPsalmReport) - vendor/bin/psalm -@else - vendor/bin/psalm --report=result.sarif - - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v2 - with: - # Path to SARIF file relative to the root of the repository - sarif_file: result.sarif -@endif - -@else - - name: Execute Code Static Analysis (PHP Stan) - run: | -@if ($stepInstallStaticAnalysis) - composer require --dev phpstan/phpstan -@endif -@if ($stepPhpstanUseNeon) - vendor/bin/phpstan analyse -c ./phpstan.neon --no-progress -@else - vendor/bin/phpstan analyse {{ $stepDirStaticAnalysis }} --level=4 --no-progress -@endif -@endif -@endif - -@if ($stepDusk) - - name: Browser Test - upgrade and start Chrome Driver - run: | - composer require --dev laravel/dusk - php artisan dusk:chrome-driver --detect - ./vendor/laravel/dusk/bin/chromedriver-linux > /dev/null 2>&1 & - - name: Run Dusk Tests - run: | - php artisan serve > /dev/null 2>&1 & - chmod -R 0755 vendor/laravel/dusk/bin/ -@if ( $stepRunMigrations ) - php artisan migrate -@endif - php artisan dusk -@include('yaml.set_env') -@endif diff --git a/resources/views/yaml/deploy_forge.blade.php b/resources/views/yaml/deploy_forge.blade.php deleted file mode 100644 index 45ebdcc..0000000 --- a/resources/views/yaml/deploy_forge.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -# Deployment Step - - name: Setup SSH - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: $@{{ secrets.SSH_PRIVATE_KEY }} - - name: Require Forge CLI - run: composer global require laravel/forge-cli - - name: Deploy Site - run: | - forge server:switch {{ $stepDeployForgeServerName }} - forge deploy {{ $stepDeployForgeSiteName}} - env: - FORGE_API_TOKEN: $@{{ secrets.FORGE_API_TOKEN }} diff --git a/resources/views/yaml/deploy_ploi.blade.php b/resources/views/yaml/deploy_ploi.blade.php deleted file mode 100644 index 30ffbf9..0000000 --- a/resources/views/yaml/deploy_ploi.blade.php +++ /dev/null @@ -1,12 +0,0 @@ -# Deployment Step - - name: Deploy via Ploi - uses: Glennmen/ploi-deploy-action@v1.2.0 - with: -@if ( $stepDeployWebhookType === 'secret' ) - # loaded from secret - webhook_url: $@{{ secrets.WEBHOOK_URL }} -@endif -@if ( $stepDeployWebhookType === 'hardcoded' ) - # loaded hardcoded - webhook_url: {{ $stepDeployWebhookUrl }} -@endif diff --git a/resources/views/yaml/deploy_vapor.blade.php b/resources/views/yaml/deploy_vapor.blade.php deleted file mode 100644 index 35a0e92..0000000 --- a/resources/views/yaml/deploy_vapor.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -# Deployment Step - - name: Require Vapor CLI - run: composer global require laravel/vapor-cli - - name: Deploy Environment - run: vapor deploy - env: - VAPOR_API_TOKEN: $@{{ secrets.VAPOR_API_TOKEN }} diff --git a/resources/views/yaml/header.blade.php b/resources/views/yaml/header.blade.php deleted file mode 100644 index 27d4ac8..0000000 --- a/resources/views/yaml/header.blade.php +++ /dev/null @@ -1,2 +0,0 @@ -# GithHub Actions Workflow generated with Ghygen -# Original configuration: {{ $configurationUrl }} diff --git a/resources/views/yaml/mysql_service.blade.php b/resources/views/yaml/mysql_service.blade.php deleted file mode 100644 index 3187e47..0000000 --- a/resources/views/yaml/mysql_service.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@if ( $databaseType === "mysql" ) - # Service container Mysql {{ $mysqlDatabase }} - services: - # Label used to access the service container - mysql: - # Docker Hub image (also with version) - image: {{ $mysqlDatabase }}:{{ $mysqlVersion }} - env: -@if ( $mysqlPasswordType === 'skip' ) - MYSQL_ALLOW_EMPTY_PASSWORD: yes -@endif -@if ( $mysqlPasswordType === 'secret' ) - MYSQL_ROOT_PASSWORD: $@{{ secrets.DB_PASSWORD }} -@endif -@if ( $mysqlPasswordType === 'hardcoded' ) - MYSQL_ROOT_PASSWORD: {{ $mysqlPassword }} -@endif - MYSQL_DATABASE: {{ $mysqlDatabaseName }} - ## map the "external" 33306 port with the "internal" 3306 - ports: - - {{ $mysqlDatabasePort }}:3306 - # Set health checks to wait until mysql database has started (it takes some seconds to start) - options: >- - --health-cmd="mysqladmin ping" - --health-interval=10s - --health-timeout=5s - --health-retries=3 -@endif diff --git a/resources/views/yaml/on.blade.php b/resources/views/yaml/on.blade.php deleted file mode 100644 index a69e334..0000000 --- a/resources/views/yaml/on.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -@if ( $manual_trigger ) -on: [ workflow_dispatch ] -@elseif ( $on_schedule ) -on: - schedule: - - cron: '{{ $on_schedule_cron }}' -@else -on: -@if ( $on_push ) - push: - branches: -@foreach ( $on_push_branches as $branch) -@if (Str::startsWith($branch, ['*', '[', '!'])) - - '{{ $branch }}' -@else - - {{ $branch }} -@endif -@endforeach -@endif -@if ( $on_pullrequest ) - pull_request: - branches: -@foreach ( $on_pullrequest_branches as $branch) -@if (Str::startsWith($branch, ['*', '[', '!'])) - - '{{ $branch }}' -@else - - {{ $branch }} -@endif -@endforeach -@endif -@endif diff --git a/resources/views/yaml/postgresql_service.blade.php b/resources/views/yaml/postgresql_service.blade.php deleted file mode 100644 index a4914ba..0000000 --- a/resources/views/yaml/postgresql_service.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@if ( $databaseType === "postgresql" ) - # Service container Postgresql {{ $postgresqlDatabase }} - services: - # Label used to access the service container - postgres: - # Docker Hub image (also with version) - image: postgres:{{ $postgresqlVersion }} - env: - POSTGRES_USER: postgres -@if ( $postgresqlPasswordType === 'secret' ) - POSTGRES_PASSWORD: $@{{ secrets.DB_PASSWORD }} -@endif -@if ( $postgresqlPasswordType === 'hardcoded' ) - POSTGRES_PASSWORD: {{ $postgresqlPassword }} -@endif - POSTGRES_DB: {{ $postgresqlDatabaseName }} - ## map the "external" 55432 port with the "internal" 5432 - ports: - - {{ $postgresqlDatabasePort }}:5432 - # Set health checks to wait until postgresql database has started (it takes some seconds to start) - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 -@endif diff --git a/resources/views/yaml/set_env.blade.php b/resources/views/yaml/set_env.blade.php deleted file mode 100644 index 5b660d9..0000000 --- a/resources/views/yaml/set_env.blade.php +++ /dev/null @@ -1,43 +0,0 @@ -# Set environment - env: -@if ( $databaseType === "mysql") -@if ( $mysqlDatabase != "") - DB_CONNECTION: {{ $mysqlDatabase }} -@endif -@if ( $mysqlDatabaseName != "") - DB_DATABASE: {{ $mysqlDatabaseName }} -@endif -@if ( $mysqlDatabasePort != "") - DB_PORT: {{ $mysqlDatabasePort }} -@endif - DB_USER: root -@if ( $mysqlPasswordType === 'skip' ) -@endif -@if ( $mysqlPasswordType === 'secret' ) - DB_PASSWORD: $@{{ secrets.DB_PASSWORD }} -@endif -@if ( $mysqlPasswordType === 'hardcoded' ) - DB_PASSWORD: {{ $mysqlPassword }} -@endif -@elseif ( $databaseType === "postgresql") - DB_CONNECTION: pgsql -@if ( $postgresqlDatabaseName != "") - DB_DATABASE: {{ $postgresqlDatabaseName }} -@endif -@if ( $postgresqlDatabasePort != "") - DB_PORT: {{ $postgresqlDatabasePort }} -@endif - DB_USERNAME: postgres -@if ( $postgresqlPasswordType === 'secret' ) - DB_PASSWORD: $@{{ secrets.DB_PASSWORD }} -@endif -@if ( $postgresqlPasswordType === 'hardcoded' ) - DB_PASSWORD: {{ $postgresqlPassword }} -@endif -@else - SESSION_DRIVER: array -@endif -@if ( $databaseType === "sqlite" ) - DB_CONNECTION: sqlite - DB_DATABASE: ":memory:" -@endif diff --git a/routes/api.php b/routes/api.php deleted file mode 100644 index bcb8b18..0000000 --- a/routes/api.php +++ /dev/null @@ -1,19 +0,0 @@ -get('/user', function (Request $request) { - return $request->user(); -}); diff --git a/routes/channels.php b/routes/channels.php deleted file mode 100644 index 5d451e1..0000000 --- a/routes/channels.php +++ /dev/null @@ -1,18 +0,0 @@ -id === (int) $id; -}); diff --git a/routes/console.php b/routes/console.php index e05f4c9..eff2ed2 100644 --- a/routes/console.php +++ b/routes/console.php @@ -3,17 +3,6 @@ use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Artisan; -/* -|-------------------------------------------------------------------------- -| Console Routes -|-------------------------------------------------------------------------- -| -| This file is where you may define all of your Closure based console -| commands. Each Closure is bound to a command instance allowing a -| simple approach to interacting with each command's IO methods. -| -*/ - Artisan::command('inspire', function () { $this->comment(Inspiring::quote()); -})->purpose('Display an inspiring quote'); +})->purpose('Display an inspiring quote')->hourly(); diff --git a/routes/web.php b/routes/web.php index cf9f7a1..86a06c5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,43 +1,7 @@ name('index'); -Route::get('/about', [ConfiguratorController::class, 'about'])->name('about'); - -Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); - -Route::post('/action', function () { - //$type = "application/x-yaml"; - $type = 'text/x-yaml'; - $data = [ - 'name' => 'Test Laravel Github action', - 'on_push' => true, - 'on_push_branches' => ['main', 'develop', 'feature/**'], - 'on_pullrequest' => true, - 'on_pullrequest_branches' => ['main'], - ]; - - return response() - ->view('action_yaml', $data, 200) - ->header('Content-Type', $type); -}); - -Route::get('/configurations', function () { - return ConfigurationResource::collection(Configuration::all()); +Route::get('/', function () { + return view('welcome'); }); diff --git a/server.php b/server.php deleted file mode 100644 index b07fa44..0000000 --- a/server.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -$uri = urldecode( - parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) -); - -// This file allows us to emulate Apache's "mod_rewrite" functionality from the -// built-in PHP web server. This provides a convenient way to test a Laravel -// application without having installed a "real" web server software here. -if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { - return false; -} - -require_once __DIR__.'/public/index.php'; diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index d72e03a..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - - content: [ - './resources/**/*.blade.php', - './resources/**/*.js', - './resources/**/*.vue', - - - ], - darkMode: 'media', // or 'media' or 'class' - theme: { - extend: {}, - }, - variants: { - extend: {}, - }, - plugins: [ - - require('@tailwindcss/typography'), - require('daisyui'), - - ], -} diff --git a/tests/Browser/ExampleTest.php b/tests/Browser/ExampleTest.php deleted file mode 100644 index 6eff13f..0000000 --- a/tests/Browser/ExampleTest.php +++ /dev/null @@ -1,22 +0,0 @@ -browse(function (Browser $browser) { - $browser->visit('/') - ->assertSee('Laravel'); - }); - } -} diff --git a/tests/Browser/FormTest.php b/tests/Browser/FormTest.php deleted file mode 100644 index 65d827e..0000000 --- a/tests/Browser/FormTest.php +++ /dev/null @@ -1,22 +0,0 @@ -browse(function (Browser $browser) { - $browser->visit('/') - ->assertSee('Ghygen'); - }); - } -} diff --git a/tests/Browser/Pages/HomePage.php b/tests/Browser/Pages/HomePage.php deleted file mode 100644 index 2fdf9ba..0000000 --- a/tests/Browser/Pages/HomePage.php +++ /dev/null @@ -1,36 +0,0 @@ - - */ - public function elements(): array - { - return [ - '@element' => '#selector', - ]; - } -} diff --git a/tests/Browser/Pages/Page.php b/tests/Browser/Pages/Page.php deleted file mode 100644 index fcd9031..0000000 --- a/tests/Browser/Pages/Page.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public static function siteElements(): array - { - return [ - '@element' => '#selector', - ]; - } -} diff --git a/tests/Browser/console/.gitignore b/tests/Browser/console/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/tests/Browser/console/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/tests/Browser/screenshots/.gitignore b/tests/Browser/screenshots/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/tests/Browser/screenshots/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php deleted file mode 100644 index 547152f..0000000 --- a/tests/CreatesApplication.php +++ /dev/null @@ -1,22 +0,0 @@ -make(Kernel::class)->bootstrap(); - - return $app; - } -} diff --git a/tests/DuskTestCase.php b/tests/DuskTestCase.php deleted file mode 100644 index 24ca071..0000000 --- a/tests/DuskTestCase.php +++ /dev/null @@ -1,48 +0,0 @@ -addArguments([ - '--disable-gpu', - '--headless', - '--window-size=1920,1080', - ]); - - return RemoteWebDriver::create( - $_ENV['DUSK_DRIVER_URL'] ?? 'http://localhost:9515', - DesiredCapabilities::chrome()->setCapability( - ChromeOptions::CAPABILITY, $options - ) - ); - } -} diff --git a/tests/Feature/DatabaseFormTest.php b/tests/Feature/DatabaseFormTest.php deleted file mode 100644 index 8a53aab..0000000 --- a/tests/Feature/DatabaseFormTest.php +++ /dev/null @@ -1,73 +0,0 @@ -livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->call('submitForm') - ->assertSee(readAsset('on-push-branches.yaml')) - ->assertSee(readAsset('mysql-service.yaml')); - -test('database default hints for migration') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepRunMigrations', false) - ->call('submitForm') - ->assertSee(readAsset('on-push-branches.yaml')) - ->assertSee(readAsset('mysql-service.yaml')) - ->assertCount('hints', 1); - -test('no database and no migrations') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test No Database') - ->set('onPullrequest', true) - ->set('databaseType', 'none') - ->set('stepRunMigrations', false) - ->call('submitForm') - ->assertHasNoErrors('yaml') - ->assertSet('hints', []) - ->assertDontSee('image: mysql:') - ->assertDontSee('DB_CONNECTION: sqlite'); - -test('generates hint - no database and migrations') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test No Database') - ->set('onPullrequest', true) - ->set('databaseType', 'none') - ->call('submitForm') - ->assertHasNoErrors('yaml') - ->assertCount('hints', 1) - ->assertDontSee('image: mysql:'); - -test('with sqlite database and migrations') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test No Database') - ->set('onPullrequest', true) - ->set('databaseType', 'sqlite') - ->call('submitForm') - ->assertHasNoErrors('yaml') - ->assertCount('hints', 0) - ->assertSee(readAsset('sqlite-migration.yaml')) - ->assertDontSee('image: mysql:'); - -test('test postgresql with migration') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test Postgresql') - ->set('onPullrequest', true) - ->set('databaseType', 'postgresql') - ->call('submitForm') - ->assertHasNoErrors('yaml') - ->assertCount('hints', 0) - ->assertSee(readAsset('postgresql-service.yaml')) - ->assertDontSee('image: mysql:'); - -test('postgresql with no migration') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test Postgresql') - ->set('onPullrequest', true) - ->set('databaseType', 'postgresql') - ->set('stepRunMigrations', false) - ->call('submitForm') - ->assertHasNoErrors('yaml') - ->assertCount('hints', 1) - ->assertSee(readAsset('postgresql-service.yaml')) - ->assertDontSee('image: mysql:'); diff --git a/tests/Feature/DeployTest.php b/tests/Feature/DeployTest.php deleted file mode 100644 index 5857dcc..0000000 --- a/tests/Feature/DeployTest.php +++ /dev/null @@ -1,25 +0,0 @@ -livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepDeployType', 'ploi') - ->set('stepDeployWebhookType', 'secret') - ->call('submitForm') - ->assertSee(readAsset('ploi-deploy.yaml')); - -test('Vapor Deploy') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepDeployType', 'vapor') - ->call('submitForm') - ->assertSee(readAsset('vapor-deploy.yaml')); - -test('Forge Deploy') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepDeployType', 'forge') - ->set('stepDeployForgeServerName', 'servername') - ->set('stepDeployForgeSiteName', 'sitename') - ->call('submitForm') - ->assertSee(readAsset('forge-deploy.yaml')); diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..8b5843f --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,7 @@ +get('/'); + + $response->assertStatus(200); +}); diff --git a/tests/Feature/PagesTest.php b/tests/Feature/PagesTest.php deleted file mode 100644 index dbb11b2..0000000 --- a/tests/Feature/PagesTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertOK(); -})->with(['index', 'about', 'dashboard']); - -it('can properly loads the index form', function () { - get(route('index')) - ->AssertSee('Select a workflow template') - ->AssertSee('On - GitHub event that triggers the workflow') - ->AssertSee('Select a workflow template') - ->assertOK(); -}); - -test('not found page') - ->get('/it-does-not-exist') - ->assertSee('Not Found') - ->AssertNotFound(); diff --git a/tests/Feature/YamlFormTest.php b/tests/Feature/YamlFormTest.php deleted file mode 100644 index 3cf17db..0000000 --- a/tests/Feature/YamlFormTest.php +++ /dev/null @@ -1,248 +0,0 @@ -livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('onPullrequest', true) - ->call('submitForm') - ->assertHasNoErrors('yaml'); - -test('form submit empty name') - ->livewire(ConfiguratorForm()) - ->set('name', '') - ->set('onPullrequest', true) - ->call('submitForm') - ->assertHasErrors('name'); - -test('form_submit on manual') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', true) - ->set('onPush', false) - ->call('submitForm') - ->assertHasNoErrors('yaml'); - -test('form submit on events', function () { - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', false) - ->set('onPush', false) - ->set('onPullrequest', false) - ->call('submitForm') - ->assertHasErrors('onEvents'); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', false) - ->set('onPush', true) - ->set('onPullrequest', false) - ->call('submitForm') - ->assertHasNoErrors('onEvents'); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', true) - ->set('onPush', true) - ->set('onPullrequest', false) - ->call('submitForm') - ->assertHasNoErrors('onEvents'); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', true) - ->set('onPush', true) - ->set('onPullrequest', true) - ->call('submitForm') - ->assertHasNoErrors('onEvents'); - - $hints = [ - "You selected all 3 options: 'on Push', 'on Pull Request', and 'Manual Trigger'. I suggest you to select 'Manual Trigger' OR 'on push / on pull request'.", - - "I selected automatically a 'Manual Trigger' for you.", - ]; - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', true) - ->set('onPush', true) - ->set('onPullrequest', true) - ->call('submitForm') - ->assertSet('hints', $hints); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', false) - ->set('onPush', true) - ->set('onPullrequest', true) - ->call('submitForm') - ->assertSet('hints', []); -}); - -test('form submit tests') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', false) - ->set('onPush', true) - ->call('submitForm') - ->assertSee(readAsset('on-push-branches.yaml')) - ->assertSee(readAsset('mysql-service.yaml')); - -test('form submit tests with mySQL') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', false) - ->set('onPush', true) - ->set('databaseType', 'mysql') - ->call('submitForm') - ->assertSee(readAsset('mysql-service.yaml')); - -test('form_submit_test_matrix') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('manualTrigger', false) - ->set('onPush', true) - ->set('matrixLaravel', true) - ->set('matrixLaravelVersions', ['8.*' => '8.*']) - ->set('stepPhpVersions', ['8.0', '7.4']) - ->call('submitForm') - ->assertSee(readAsset('on-push-branches.yaml')) - ->assertSee(readAsset('mysql-service.yaml')) - ->assertSee(readAsset('strategy-php-8-74.yaml')); - -test('dependency stability level: "prefer-stable"') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test Dependency Level') - ->set('dependencyStability', ['prefer-stable']) - ->call('submitForm') - ->assertSee("dependency-stability: [ 'prefer-stable' ]"); - -test('dependency stability level: "prefer-lowest" and "prefer-stable"') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test Dependency Level') - ->set('dependencyStability', ['prefer-lowest', 'prefer-stable']) - ->call('submitForm') - ->assertSee("dependency-stability: [ 'prefer-lowest','prefer-stable' ]"); - -test('without dependency stability level:') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test Without Dependency Level') - ->call('submitForm') - ->assertSee("dependency-stability: [ 'prefer-none' ]"); - -test('form_codequality_tests', function () { - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteStaticAnalysis', true) - ->set('stepInstallStaticAnalysis', false) - ->call('submitForm') - ->assertSee(readAsset('phpstan-noinstall.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteStaticAnalysis', true) - ->set('stepInstallStaticAnalysis', true) - ->call('submitForm') - ->assertSee(readAsset('phpstan-install.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteStaticAnalysis', true) - ->set('stepInstallStaticAnalysis', true) - ->set('stepToolStaticAnalysis', 'larastan') - ->call('submitForm') - ->assertSee(readAsset('phpstan-install.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteStaticAnalysis', true) - ->set('stepInstallStaticAnalysis', true) - ->set('stepToolStaticAnalysis', 'phpstan') - ->call('submitForm') - ->assertDontSee('composer require --dev nunomaduro/larastan') - ->assertSee('composer require --dev phpstan/phpstan'); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteStaticAnalysis', true) - ->set('stepInstallStaticAnalysis', false) - ->call('submitForm') - ->assertDontSee('composer require --dev nunomaduro/larastan') - ->assertDontSee('composer require --dev phpstan/phpstan'); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteStaticAnalysis', true) - ->set('stepInstallStaticAnalysis', false) - ->set('stepPhpstanUseNeon', true) - ->call('submitForm') - ->assertSee(readAsset('phpstan-conffile.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteCodeSniffer', true) - ->set('stepInstallCodeSniffer', false) - ->call('submitForm') - ->assertSee(readAsset('phpcs-noinstall.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteCodeSniffer', true) - ->set('stepInstallCodeSniffer', true) - ->call('submitForm') - ->assertSee(readAsset('phpcs-install.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepExecuteCodeSniffer', true) - ->set('stepDirCodeSniffer', 'src') - ->set('stepInstallCodeSniffer', true) - ->call('submitForm') - ->assertSee(readAsset('phpcs-srcdir.yaml')); -}); - -test('form_keygenerate_tests', function () { - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepGenerateKey', true) - ->call('submitForm') - ->assertSee(readAsset('generate-key.yaml')); - - livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepGenerateKey', false) - ->call('submitForm') - ->assertDontSee('run: php artisan key:generate'); -}); - -test('form copy env') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepCopyEnvTemplateFile', true) - ->call('submitForm') - ->assertSee(readAsset('copy-env.yaml')); - -test('form copy env from ci') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepCopyEnvTemplateFile', true) - ->set('stepEnvTemplateFile', '.env.ci') - ->call('submitForm') - ->assertSee(str_replace('.env.example', '.env.ci', readAsset('copy-env.yaml'))); - -test('form copy env template') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test') - ->set('stepCopyEnvTemplateFile', false) - ->call('submitForm') - ->assertDontSee('- name: Copy .env'); - -test('form branches wildcard') - ->livewire(ConfiguratorForm()) - ->set('name', 'Test Wildcard') - ->set('manualTrigger', false) - ->set('onPush', true) - ->set('onPushBranches', '*') - ->call('submitForm') - ->assertSee(readAsset('on-push-branches-wildcard.yaml')); diff --git a/tests/Feature/mock-asserts/copy-env.yaml b/tests/Feature/mock-asserts/copy-env.yaml deleted file mode 100644 index eae9818..0000000 --- a/tests/Feature/mock-asserts/copy-env.yaml +++ /dev/null @@ -1,2 +0,0 @@ - - name: Copy .env - run: php -r "file_exists('.env') || copy('.env.example', '.env');" diff --git a/tests/Feature/mock-asserts/forge-deploy.yaml b/tests/Feature/mock-asserts/forge-deploy.yaml deleted file mode 100644 index b959dda..0000000 --- a/tests/Feature/mock-asserts/forge-deploy.yaml +++ /dev/null @@ -1,13 +0,0 @@ - # Deployment Step - - name: Setup SSH - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Require Forge CLI - run: composer global require laravel/forge-cli - - name: Deploy Site - run: | - forge server:switch servername - forge deploy sitename - env: - FORGE_API_TOKEN: ${{ secrets.FORGE_API_TOKEN }} diff --git a/tests/Feature/mock-asserts/generate-key.yaml b/tests/Feature/mock-asserts/generate-key.yaml deleted file mode 100644 index 21db4d4..0000000 --- a/tests/Feature/mock-asserts/generate-key.yaml +++ /dev/null @@ -1,2 +0,0 @@ - - name: Generate key - run: php artisan key:generate diff --git a/tests/Feature/mock-asserts/mysql-service.yaml b/tests/Feature/mock-asserts/mysql-service.yaml deleted file mode 100644 index b2f19a1..0000000 --- a/tests/Feature/mock-asserts/mysql-service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Service container Mysql mysql - services: - # Label used to access the service container - mysql: - # Docker Hub image (also with version) - image: mysql:latest - env: - MYSQL_ALLOW_EMPTY_PASSWORD: yes - MYSQL_DATABASE: db_test_laravel - ## map the "external" 33306 port with the "internal" 3306 - ports: - - 33306:3306 - # Set health checks to wait until mysql database has started (it takes some seconds to start) - options: >- - --health-cmd="mysqladmin ping" - --health-interval=10s - --health-timeout=5s - --health-retries=3 diff --git a/tests/Feature/mock-asserts/on-push-branches-wildcard.yaml b/tests/Feature/mock-asserts/on-push-branches-wildcard.yaml deleted file mode 100644 index ab99b91..0000000 --- a/tests/Feature/mock-asserts/on-push-branches-wildcard.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: Test Wildcard -on: - push: - branches: - - '*' diff --git a/tests/Feature/mock-asserts/on-push-branches.yaml b/tests/Feature/mock-asserts/on-push-branches.yaml deleted file mode 100644 index f761a05..0000000 --- a/tests/Feature/mock-asserts/on-push-branches.yaml +++ /dev/null @@ -1,7 +0,0 @@ -name: Test -on: - push: - branches: - - main - - develop - - features/** diff --git a/tests/Feature/mock-asserts/phpcs-install.yaml b/tests/Feature/mock-asserts/phpcs-install.yaml deleted file mode 100644 index 7c13410..0000000 --- a/tests/Feature/mock-asserts/phpcs-install.yaml +++ /dev/null @@ -1,4 +0,0 @@ - - name: Execute Code Sniffer via phpcs - run: | - composer require --dev squizlabs/php_codesniffer - vendor/bin/phpcs --standard=PSR12 app diff --git a/tests/Feature/mock-asserts/phpcs-noinstall.yaml b/tests/Feature/mock-asserts/phpcs-noinstall.yaml deleted file mode 100644 index c5418d9..0000000 --- a/tests/Feature/mock-asserts/phpcs-noinstall.yaml +++ /dev/null @@ -1,3 +0,0 @@ - - name: Execute Code Sniffer via phpcs - run: | - vendor/bin/phpcs --standard=PSR12 app diff --git a/tests/Feature/mock-asserts/phpcs-srcdir.yaml b/tests/Feature/mock-asserts/phpcs-srcdir.yaml deleted file mode 100644 index fbf62c6..0000000 --- a/tests/Feature/mock-asserts/phpcs-srcdir.yaml +++ /dev/null @@ -1,4 +0,0 @@ - - name: Execute Code Sniffer via phpcs - run: | - composer require --dev squizlabs/php_codesniffer - vendor/bin/phpcs --standard=PSR12 src diff --git a/tests/Feature/mock-asserts/phpstan-conffile.yaml b/tests/Feature/mock-asserts/phpstan-conffile.yaml deleted file mode 100644 index 80cead1..0000000 --- a/tests/Feature/mock-asserts/phpstan-conffile.yaml +++ /dev/null @@ -1,3 +0,0 @@ - - name: Execute Code Static Analysis (PHP Stan + Larastan) - run: | - vendor/bin/phpstan analyse -c ./phpstan.neon --no-progress diff --git a/tests/Feature/mock-asserts/phpstan-install.yaml b/tests/Feature/mock-asserts/phpstan-install.yaml deleted file mode 100644 index 90e1506..0000000 --- a/tests/Feature/mock-asserts/phpstan-install.yaml +++ /dev/null @@ -1,4 +0,0 @@ - - name: Execute Code Static Analysis (PHP Stan + Larastan) - run: | - composer require --dev nunomaduro/larastan - vendor/bin/phpstan analyse app -c ./vendor/nunomaduro/larastan/extension.neon --level=4 --no-progress diff --git a/tests/Feature/mock-asserts/phpstan-noinstall.yaml b/tests/Feature/mock-asserts/phpstan-noinstall.yaml deleted file mode 100644 index 1f04ac4..0000000 --- a/tests/Feature/mock-asserts/phpstan-noinstall.yaml +++ /dev/null @@ -1,3 +0,0 @@ - - name: Execute Code Static Analysis (PHP Stan + Larastan) - run: | - vendor/bin/phpstan analyse app -c ./vendor/nunomaduro/larastan/extension.neon --level=4 --no-progress diff --git a/tests/Feature/mock-asserts/ploi-deploy.yaml b/tests/Feature/mock-asserts/ploi-deploy.yaml deleted file mode 100644 index 8b00fc6..0000000 --- a/tests/Feature/mock-asserts/ploi-deploy.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Deployment Step - - name: Deploy via Ploi - uses: Glennmen/ploi-deploy-action@v1.2.0 - with: - # loaded from secret - webhook_url: ${{ secrets.WEBHOOK_URL }} diff --git a/tests/Feature/mock-asserts/postgresql-service.yaml b/tests/Feature/mock-asserts/postgresql-service.yaml deleted file mode 100644 index 5fe68d7..0000000 --- a/tests/Feature/mock-asserts/postgresql-service.yaml +++ /dev/null @@ -1,18 +0,0 @@ - services: - # Label used to access the service container - postgres: - # Docker Hub image (also with version) - image: postgres:latest - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: db_test_laravel - ## map the "external" 55432 port with the "internal" 5432 - ports: - - 55432:5432 - # Set health checks to wait until postgresql database has started (it takes some seconds to start) - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 diff --git a/tests/Feature/mock-asserts/sqlite-migration.yaml b/tests/Feature/mock-asserts/sqlite-migration.yaml deleted file mode 100644 index 9d166d2..0000000 --- a/tests/Feature/mock-asserts/sqlite-migration.yaml +++ /dev/null @@ -1,8 +0,0 @@ - - name: Run Migrations -# Set environment - env: - SESSION_DRIVER: array - DB_CONNECTION: sqlite - DB_DATABASE: ":memory:" - - run: php artisan migrate diff --git a/tests/Feature/mock-asserts/strategy-php-8-74.yaml b/tests/Feature/mock-asserts/strategy-php-8-74.yaml deleted file mode 100644 index 98c7bb3..0000000 --- a/tests/Feature/mock-asserts/strategy-php-8-74.yaml +++ /dev/null @@ -1,10 +0,0 @@ - strategy: - matrix: - operating-system: [ubuntu-latest] - php-versions: [ '8.0','7.4' ] - dependency-stability: [ 'prefer-none' ] - - laravel: [ '8.*' ] - include: - - laravel: 8.* - testbench: 6.* diff --git a/tests/Feature/mock-asserts/vapor-deploy.yaml b/tests/Feature/mock-asserts/vapor-deploy.yaml deleted file mode 100644 index e68a24a..0000000 --- a/tests/Feature/mock-asserts/vapor-deploy.yaml +++ /dev/null @@ -1,6 +0,0 @@ - - name: Require Vapor CLI - run: composer global require laravel/vapor-cli - - name: Deploy Environment - run: vapor deploy - env: - VAPOR_API_TOKEN: ${{ secrets.VAPOR_API_TOKEN }} diff --git a/tests/Pest.php b/tests/Pest.php index 3f4f4dc..50ab1e4 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -1,24 +1,48 @@ in('Feature'); -/** - * ConfiguratorForm class name - */ -function ConfiguratorForm(): string -{ - return ConfiguratorForm::class; -} +/* +|-------------------------------------------------------------------------- +| Expectations +|-------------------------------------------------------------------------- +| +| When you're writing tests, you often need to check that values meet certain conditions. The +| "expect()" function gives you access to a set of "expectations" methods that you can use +| to assert different things. Of course, you may extend the Expectation API at any time. +| +*/ + +expect()->extend('toBeOne', function () { + return $this->toBe(1); +}); + +/* +|-------------------------------------------------------------------------- +| Functions +|-------------------------------------------------------------------------- +| +| While Pest is very powerful out-of-the-box, you may have some testing code specific to your +| project that you don't want to repeat in every file. Here you can also expose helpers as +| global functions to help you to reduce the number of lines of code in your test files. +| +*/ -/** - * Reads assets file content - */ -function readAsset(string $filename): string +function something() { - return file_get_contents(__DIR__.'/Feature/mock-asserts/'.$filename); + // .. } diff --git a/tests/TestCase.php b/tests/TestCase.php index 2932d4a..fe1ffc2 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -6,5 +6,5 @@ abstract class TestCase extends BaseTestCase { - use CreatesApplication; + // } diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php index 7a0ff77..44a4f33 100644 --- a/tests/Unit/ExampleTest.php +++ b/tests/Unit/ExampleTest.php @@ -1,20 +1,5 @@ assertTrue(App::environment('testing')); - } -} +test('that true is true', function () { + expect(true)->toBeTrue(); +}); diff --git a/tests/Unit/GuesserTest.php b/tests/Unit/GuesserTest.php deleted file mode 100644 index adb1334..0000000 --- a/tests/Unit/GuesserTest.php +++ /dev/null @@ -1,49 +0,0 @@ -assertIsArray($arr); - $this->assertCount(0, $arr, 'Invalid testbench version'); - - $arr = GuesserFiles::detectLaravelVersionFromTestbench('4.*|5.*|6.*'); - $this->assertIsArray($arr); - $this->assertCount(3, $arr); - - $arr = GuesserFiles::detectLaravelVersionFromTestbench('5.*|6.*'); - $this->assertIsArray($arr); - $this->assertCount(2, $arr); - $this->assertEquals('8.*', $arr[1]); - - $arr = GuesserFiles::detectLaravelVersionFromTestbench('7.*'); - $this->assertIsArray($arr); - $this->assertCount(1, $arr); - $this->assertEquals('9.*', $arr[0]); - } - - /** - * Test for path guesser. - * - * @return void - */ - public function testPathGuesser() - { - $guesserFiles = new GuesserFiles(); - $guesserFiles->pathFiles('../test'); - - $this->assertEquals($guesserFiles->getEnvDefaultTemplatePath(), '../test/.env.example'); - } -} diff --git a/vite.config.js b/vite.config.js index 59a21ba..421b569 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,22 +1,11 @@ import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; -// import react from '@vitejs/plugin-react'; -// import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [ - laravel([ - 'resources/css/app.css', - 'resources/js/app.js', - ]), - // react(), - // vue({ - // template: { - // transformAssetUrls: { - // base: null, - // includeAbsolute: false, - // }, - // }, - // }), + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), ], }); From 7161bd9947f4ef8217d95d8c4ff4f76fe3a18630 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Thu, 14 Mar 2024 23:38:38 +0100 Subject: [PATCH 02/16] Updating tailwindcss / daisyui --- .gitignore | 1 + README.md | 174 ++++++++++++++++++++++++++---------------- bun.lockb | Bin 0 -> 65433 bytes package.json | 26 ++++--- postcss.config.js | 6 ++ resources/css/app.css | 3 + tailwind.config.js | 16 ++++ 7 files changed, 149 insertions(+), 77 deletions(-) create mode 100755 bun.lockb create mode 100644 postcss.config.js create mode 100644 tailwind.config.js diff --git a/.gitignore b/.gitignore index 9a01f24..ceb6d67 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ public/mix-manifest.json /Makefile.param.prod /public/google*.html + /output/ /.vscode/ result.sarif diff --git a/README.md b/README.md index 1a4c26b..d6af2f5 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,108 @@ -

Laravel Logo

- -

-Build Status -Total Downloads -Latest Stable Version -License -

- -## About Laravel - -Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: - -- [Simple, fast routing engine](https://laravel.com/docs/routing). -- [Powerful dependency injection container](https://laravel.com/docs/container). -- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. -- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). -- Database agnostic [schema migrations](https://laravel.com/docs/migrations). -- [Robust background job processing](https://laravel.com/docs/queues). -- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). - -Laravel is accessible, powerful, and provides tools required for large, robust applications. - -## Learning Laravel - -Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. - -You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. - -If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. - -## Laravel Sponsors - -We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). - -### Premium Partners - -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[WebReinvent](https://webreinvent.com/)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[DevSquad](https://devsquad.com/hire-laravel-developers)** -- **[Jump24](https://jump24.co.uk)** -- **[Redberry](https://redberry.international/laravel/)** -- **[Active Logic](https://activelogic.com)** -- **[byte5](https://byte5.de)** -- **[OP.GG](https://op.gg)** - -## Contributing - -Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). - -## Code of Conduct - -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). - -## Security Vulnerabilities - -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. - -## License - -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +![GitHub Workflow Status (main branch)](https://img.shields.io/github/actions/workflow/status/Hi-Folks/gh-actions-yaml-generator/check-php.yml?branch=main&style=for-the-badge) +![GitHub release (latest by date)](https://img.shields.io/github/v/release/Hi-Folks/gh-actions-yaml-generator?style=for-the-badge) +![Website](https://img.shields.io/website?label=Demo%20Site&style=for-the-badge&url=https%3A%2F%2Fghygen.hi-folks.dev%2F) + +![Ghygen](ghygen-github-actions-yaml-generator-laravel.png "Ghygen") + +# Ghygen +__Ghygen__ is a GitHub actions Yaml Generator. + +__Ghygen__ allows you creating your __Yaml__ file for __GitHub Actions__, for Laravel/PHP web application, so you can: + +- select triggering events: manually or automatically, when the developer _push_ the code on a specific branch, or a developer create a new _Pull Request_; +- select branches; +- enable caching for all vendors; +- enable __caching__ PHP packages; +- select __multiple__ PHP versions (8.2, 8.1, 8.0, 7.4); +- select __multiple Laravel__ versions (10, 9, 8, 7, 6), useful if you are developing a Laravel Package and you want to test it with multiple Laravel version; +- select __Node__ version for NPM (executing scripts via `npm run`); +- caching node packages; +- setup __Mysql__ Database service; +- setup __PostgreSQL__ Database service; +- setup __Sqlite__ in memory database; +- run migrations; +- __execute tests__ via phpunit; +- __execute tests__ via PestPHP; +- static __code analysis__ with phpstan or psalm; +- create Sarif report (with Psalm) for __GitHub integration with code scanning__; +- code sniffer (via phpcs for __PSR12__ compatibility); +- __validate Yaml__ file; +- execute __Browser Test__ via Laravel Dusk. +- Run __Deployments__ via Ploi using [Ploi Deploy Action](https://github.com/Glennmen/ploi-deploy-action). + +This is a Work In Progress, we are adding new features... + +If you want to test and use quickly this tool, I deployed the codebase (main branch) on Digital Ocean Platform: + +- [Ghygen Demo](https://ghygen.hi-folks.dev/). + +If you want to start using it locally you can clone the repo and install it following the instructions below. + +## Command line +Experimental and "magical" feature: Ghygen ships also a command for generating **automatically** a GitHub Actions workflow Yaml file. +You can install Gygen as project with composer: +```shell +composer create-project hi-folks/ghygen +cd ghygen +``` +Once you installed Ghygen, you can execute: +```shell +php artisan ghygen:generate --projectdir=../otherproject +``` +Where "../otherproject" is the directory (absolute or relative path name) with your Laravel project (application or package) that yuo want to automatically generate the GitHub Actions workflow yaml file. +This "magic" command, will extract information from: +- composer.json +- package.json (if it exists) +- .env file +- ... and other assets +- in order to guess a configuration for your GitHub Actions workflow. + +By default the command will show the Yaml workflow file in the standard output. If you want to save it in a file for example "my-workflow.yml" you can use --save option: +```shell +php artisan ghygen:generate --save=my-workflow.yml +``` + +If you want to autogenerate Yaml file in the .github/workflows directory use --save=auto +```shell +php artisan ghygen:generate --save=auto +``` +The file name will be created with the name found in composer.json (slugified). + +So if you are *superlazy* and want to generate the workflow for the project in the directory ../myproject , you can execute: +```shell +php artisan ghygen:generate --projectdir=../myproject/ --save=auto +``` + + +## Install +Clone source code, enter the new directory and perform a couple of instructions: +```shell +git clone https://github.com/Hi-Folks/gh-actions-yaml-generator.git +cd gh-actions-yaml-generator +make install +``` +Then create your database and update the .env file with the right values for DB_* . + +Once your Database is configured you can execute the migrations: +```shell +php artisan migrate +``` +Start development server +```shell +php artisan serve +``` +Open the browser to the URL: http://127.0.0.1:8000 + +## Usage +Follow these steps: +- access to the form (by default the URL is http://127.0.0.1:8000 if you run php artisan serve); +- fill the form; +- click on "Generate Yaml File" button. + +![github-actions-generator-laravel](github-actions-generator-laravel.png "github-actions-generator-laravel") + +Next, copy the content of your generated Yaml in a new file in your Laravel project _.github/workflows/laravel_workflow.yaml_ . + +Commit and push the new file. + +If you configured "On - Push" you will see the running Actions in your Actions section of your GitHub project. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..14318beac62ed4ffce3bf91583abdb1294f895c9 GIT binary patch literal 65433 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 Date: Thu, 14 Mar 2024 23:41:08 +0100 Subject: [PATCH 03/16] upgrading pint --- composer.json | 2 +- composer.lock | 2 +- pint.json | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 pint.json diff --git a/composer.json b/composer.json index 8851edc..aa9bb8a 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ }, "require-dev": { "fakerphp/faker": "^1.23", - "laravel/pint": "^1.13", + "laravel/pint": "^1.14", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", diff --git a/composer.lock b/composer.lock index 89c7a52..8e0d9d3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fc988501b10afbbcc9a565db47aa7499", + "content-hash": "837959bc2ad3a48cd5a158a5a0a93d1d", "packages": [ { "name": "brick/math", diff --git a/pint.json b/pint.json new file mode 100644 index 0000000..93061b6 --- /dev/null +++ b/pint.json @@ -0,0 +1,3 @@ +{ + "preset": "laravel" +} From ef560ce169c124840873de7b6b244e883b6afc25 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Fri, 15 Mar 2024 07:36:04 +0100 Subject: [PATCH 04/16] Update phpunit.xml --- phpunit.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 506b9a3..61c031c 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -22,8 +22,8 @@ - - + + From 22f20d99083b7ae880e9847c8e0369105c12b56b Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Fri, 15 Mar 2024 07:36:14 +0100 Subject: [PATCH 05/16] md files --- CHANGELOG.md | 280 ++++++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 70 ++++++++++++ README.md | 16 +++ 3 files changed, 366 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0eea88e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,280 @@ +# Changelog + +## 0.7.1 - 2023-05-07 +- Switching from Webpack to Vite +- Updating node version for auto-generate command +- Updating PHP version for auto-generate command +- Updating dependencies (PHP and Node) + +## 0.7.0 - 2023-02-19 + +- Added Laravel 10 options for using L10 in the GitHub Actions workflows +- Upgrading Actions: + - actions/checkout@v3 + - actions/setup-node@v3 + - github/codeql-action/upload-sarif@v2 + - symfonycorp/security-checker-action@v4 + - webfactory/ssh-agent@v0.7.0 +- Introducing Laravel Pint +- Introducing PestPHP +- Converting Feature tests for PestPHP, thanks to @dansysanalyst for #151 +- Using composer scripts for executing code quality tools + +## 0.6.2 - 2022-12-20 +- PHPStan Level 6 +- Support for PHP 8.2 + +## 0.6.1 - 2022-04-17 +- added php8.1 for auto-detecting php version for matrix +- added make install command by @AlessandroMinoccheri +- fix load template for matrixTestbenchDependencies + +## 0.6.0 - 2022-04-13 +- upgrade to Laravel 9 framework + +## 0.5.2 - 2022-04-12 +- added laravel 9 mapping for testbench, thanks to @dkemper +- improve dark/light mode +- update npm packages + +## 0.5.1 - 2021-11-27 +Welcome PHP 8.1 +- update GitHub actions workflows for 8.1 +- add option for 8.1 in the UI + +## 0.5.0 - 2021-11-21 +- Now you can **deploy with Forge** with your CI workflow +- **UI refactoring**: Introducing DaisyUI components +- **Report** for command line execution +- Upgrade to **PHPstan 1** +- Command line: added --dry-run option +- Now is possible to **install Ghygen** with composer create-project hi-folks/ghygen + + +## 0.4.6 - 2021-10-23 +It's still Hacktoberfest! +- Welcome to PHP 8.1, you can select PHP8.1 (experimental) to check the compatibility of your application in CICD + +## 0.4.5 - 2021-10-22 +It's still Hacktoberfest! +- You can schedule a workflow to run at specific UTC times using POSIX cron syntax; +- Security check + +## 0.4.4 - 2021-10-21 +It's still Hacktoberfest! +- Welcome --save option for CLI (you can define the filename of the workflow file); +- Set automatically the workflow filename for auto generation (to much automation ;) with --save=auto option +- Twitter card :) + +## 0.4.3 - 2021-10-19 +It is still Hacktoberfest! +- Psalm, create Sarif report for GitHub code scanning integration +- update to Alpinejs 3 +- Allow user to set dependency stability (none, the latest stable, the lowest stable), thanks to @marulitua +- Phpstan Level 6 (from 5 to 6, report missing typehints) + +## 0.4.2 - 2021-10-12 +Hacktoberfest, goes on... +- Updated Cover image +- Using phpstan.neon file, thanks to @ActuallyConnor +- autodetect usage of phpstan.neon from command line +- better management of title and description in meta html tags. Thanks to @zaratedev + + +## 0.4.1 - 2021-10-03 +It is time for Hacktoberfest!!! +- With template laravelpackage (no composer.lock), avoid cache vendors and cache package. Thanks to @hetpatel33 for the hacktoberfest contribution; +- Update PHP packages, also [Laralens 0.2.6](https://github.com/Hi-Folks/lara-lens); +- Update contributing file for new contributors. +- +## 0.4.0 - 2021-09-15 +- Add command to generate automatically GitHub Actions workflow from composer.json, .env, migrations, packages.json + +## 0.3.7 - 2021-08-11 + +- Add launching tests via PestPHP + +## 0.3.6 - 2021-06-13 + +### Add +- Deploy Serverless Application via Vapor + +## 0.3.5 - 2021-05-17 + +### Add +- Deploy step with Ploi service. Thank you to @ashwind-19 + +## 0.3.4 - 2021-05-13 + +### Add +- Add wildcard for branch names +### Change +- Psalm fix MissingReturnType,MissingParamType +- clean up developments stuff after deploy +- cleaning some test workflows for GitHub Actions + +## 0.3.3 - 2021-04-24 + +### Add +- Psalm as Static Code Analysis Tool +- Add composer install --no-dev before deploy + +## 0.3.2 - 2021-04-22 + +### Add +- Postgresql template option + +### Change +- Update some style (template cards and header) + +## 0.3.1 - 2021-04-18 + +### Change +- Update default Node version to 15.x (stable) +- Fix some typos in the help labels in the Form +- Upgraded Node packages + +## 0.3.0 - 2021-04-15 + +### Add +- Select Template option: Laravel application, PHP package, Laravel package ( #62 ); +- Select tool for code static analysis ( #63 ) + + +## 0.2.5 - 2021-04-12 + +### Add +- New option for installing phpstan in workflow +- New option for installing phpcs in workflow +- New option for defining directory to check for phpcs ("app" default ) +- New option for defining directory to check for phpstan ("app" default) +- New option for execute (or not) 'php artisan key:generate' +- New option for copying .env template +- Install Phpstan and phpcs as composer dev + +### Change +- Upgrade PHP packages + + +## 0.2.4 - 2021-04-05 + +### Add +- Add Postgresql database + +### Change +- Fix Dashboard when some old data is loaded (isMysqlService vs dataType) + +## 0.2.3 - 2021-04-04 + +### Add +- Add Sqlite (in memory) support in your workflow (now the user can select: none, mysql or sqlite); +- Add Validation for Laravel version + + +## 0.2.2 - 2021-03-07 + +### Add +- All Hashcode configurations are logged into log_configurations table; +- Dashboard: Show the total configurations created daily; +- Add About page with /about URL. + +### Change +- Dashboard: sort latest configurations by updated_at. + +## 0.2.1 - 2021-02-26 +### Add +- Add API for listing configurations +- Add Dashboard for showing some infos from configurations + +## 0.2.0 - 2021-02-15 +### Add +- Add permalink to load saved configuration +- Add Makefile for deploy +- Add check for Rate Limit https://github.com/danharrin/livewire-rate-limiting +- Add LaraLens package https://github.com/Hi-Folks/lara-lens +### Change +- Use database migrations in tests +- Change Demo URL: https://ghygen.hi-folks.dev/ +- optimize js code after submit form + +## 0.1.8 - 2021-02-06 +### Add +- Caching node_modules directory when npm build is selected +- add check for on events (just to avoid a mix of manual/automatic behaviour) + +## 0.1.7 - 2021-02-05 +### Add +- Validation for some mandatory fields like name, "on events"; +- Conditional validation for some mandatory fields that depend on a check (, branches if "On" event is selected, mysql parameter if Mysql service is selected); +- Add Makefile for development. +- Add Hints / Suggestions + +## 0.1.6 - 2021-01-31 +### Add +- Add Laravel Matrix (for Laravel 8, Laravel 7 and Laravel 6) +- Add caching Schema Yaml file (to improve the speed during Yaml checks) + +## 0.1.5 - 2021-01-23 +### Add +- Add syntax highlight for Yaml workflow file +- Add copy button. ONce the Yaml is generated, you can click Copy Button in order to copy in the clipboard the content (so you can paste in your .github/workflows/*.yml file) +- Add Open Graph meta in the main page +- Add Larastan for phpstan, for a better compatibility with Laravel for static code analysis + +### Change +- fix margin and padding for checkboxes +- change input colors, from indigo to blue +- Fix load env parameters (load DB_ parameters only if database is needed) +- Fix Chrome driver version for Browser Tests (Laravel Dusk) + +## 0.1.4 - 2021-01-15 +### Add +- new .env parameter for forcing HTTPS for assets: APP_FORCE_HTTPS; +- using Larastan (to enhance the compatibility for phpstan with Laravel) +- adding check for Laravel Dusk, so your workflow can launch browser test directly in the CICD + + +## 0.1.3 - 2021-01-07 +### Add +- Validate Yaml file generated +- Show errors if there is some syntax error in Yaml file + +### Change +- red background if some error happens during the generation of Yaml file + + +## 0.1.2 - 2021-01-05 +### Add +- Tests execution (via phpunit) +- Code Sniffer (via phpcs) +- Static Analysis (via phpstan) +- Select Mysql Password: skip / from secret / hardcoded +- Run migrations (php artisan migrate) +- Nodejs setup (optional) +- Npm packages installation +- Caching Npm packages + +### Change +- fix array/string conversion for branches + + +## 0.1.1 (Proof of Concept) - 2021-01-03 + +### Change +- MYSQL_ALLOW_EMPTY_PASSWORD for mysql container service +- use features/** for triggering actions on push event +- fix indent _jobs_ in yaml file + +## 0.1.0 (Proof of Concept) - 2021-01-03 + +### Add +- initial release +- Collect some parameters about: + - name of workflow; + - "On" (events that trigger the workflow); + - setup mysql service container; + - Caching vendors and packages; + - select PHP versions; + - select NodeJs version (for npm build); + - some specific Laravel stuff (.env file, fix storage permissions). +- Generate Yaml file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d55b425 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,70 @@ +# Contributing + +Contributions are **welcome** and will be fully **credited**. + +Please read and understand the contribution guide before creating an issue or pull request. + +## Etiquette + +This project is open source, and as such, the maintainers give their free time to build and maintain the source code +held within. They make the code freely available in the hope that it will be of use to other developers. It would be +extremely unfair for them to suffer abuse or anger for their hard work. + +Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the +world that developers are civilized and selfless people. + +It's the duty of the maintainer to ensure that all submissions to the project are of sufficient +quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used. + +## Viability + +When requesting or submitting new features, first consider whether it might be useful to others. Open +source projects are used by many developers, who may have entirely different needs to your own. Think about +whether or not your feature is likely to be used by other users of the project. + +## Procedure + +Before filing an issue: + +- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident. +- Check to make sure your feature suggestion isn't already present within the project. +- Check the pull requests tab to ensure that the bug doesn't have a fix in progress. +- Check the pull requests tab to ensure that the feature isn't already in progress. + +Before submitting a pull request: + +- Check the codebase to ensure that your feature doesn't already exist. +- Check the pull requests to ensure that another person hasn't already submitted the feature or fix. + +## Open a Pull Request + +In order to maintain consistency in the source code we are following PSR12 coding standard, and using PHP stan for static code analysis. +You can use the command: + +```bash +composer all +``` + + +to launch +- **[Laravel Coding Standard](https://github.com/laravel/pint/blob/main/resources/presets/laravel.php)**, under the hood is used [Laravel Pint](https://github.com/laravel/pint); +- **PHPstan** with [level 6](https://phpstan.org/user-guide/rule-levels) +- **PestPHP** to execute all tests from ./tests/* + +I suggest to launch *composer all* before to commit or before to create PR. + +If you want to work on a PR, I suggest you to creating a new branch starting from **develop branch**, and use it also when you will submit your new **P**ull **R**equest on the original repository. + +If you want to contribute with an high quality PR, I suggest you to focus not just on the source code but also: + +- **Add tests!** - Your patch won't be accepted if it doesn't have tests. + +- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. + +- **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option. + +- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. + +- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. + +**Happy coding**! diff --git a/README.md b/README.md index d6af2f5..94229f9 100644 --- a/README.md +++ b/README.md @@ -106,3 +106,19 @@ Next, copy the content of your generated Yaml in a new file in your Laravel proj Commit and push the new file. If you configured "On - Push" you will see the running Actions in your Actions section of your GitHub project. + +## Thanks to + +Thanks to all the people for providing feedback, opening issues, creating Pull Requests. +Thank you to all the contributors! You can see the list of contributors [at this section](https://github.com/Hi-Folks/gh-actions-yaml-generator/graphs/contributors). + +In the PHP ecosystem, we have many tools that help developers work with great productivity, reliability, and efficiency. One of these tools is JetBrains PHP Storm. +JetBrains supports the open-source community by providing licenses for open-source projects. +You can find more information in the [Open Source section of the JetBrains website](https://jb.gg/OpenSourceSupport). + +PhpStorm logo + + +JetBrains is providing me the license for the Ghygen project. +This fills me with joy, because Ghygen has been recognized as a deserving open-source software. +Thank you. From 1c45ab3dad42fcdedd67be0ce801773b1615f541 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Fri, 15 Mar 2024 17:57:48 +0100 Subject: [PATCH 06/16] moving files from 9 to 11 --- app/Console/Commands/GenerateWorkflow.php | 314 +++++++++++ .../Controllers/ConfiguratorController.php | 19 + app/Http/Controllers/DashboardController.php | 11 + app/Http/Livewire/ConfiguratorForm.php | 226 ++++++++ app/Http/Livewire/Dashboard/Daily.php | 35 ++ app/Http/Livewire/Dashboard/Latest.php | 24 + app/Http/Livewire/Dashboard/Metrics.php | 46 ++ app/Http/Livewire/Dashboard/Top.php | 24 + .../Resources/ConfigurationCollection.php | 19 + app/Http/Resources/ConfigurationResource.php | 32 ++ app/Models/Configuration.php | 92 ++++ app/Models/LogConfiguration.php | 13 + app/Objects/GuesserFiles.php | 236 +++++++++ app/Objects/ReportExecution.php | 167 ++++++ app/Objects/WorkflowGenerator.php | 180 +++++++ app/Providers/ViewServiceProvider.php | 23 + app/Traits/Form/BaseWorkflow.php | 214 ++++++++ app/Traits/Form/CodeQuality.php | 98 ++++ app/Traits/Form/Deploy.php | 60 +++ app/Traits/Form/LaravelStuff.php | 82 +++ app/View/Composers/AppDataComposer.php | 16 + bootstrap/providers.php | 1 + bun.lockb | Bin 65433 -> 69596 bytes composer.json | 7 +- composer.lock | 496 +++++++++++++++--- package.json | 5 + resources/js/app.js | 14 + resources/templates/json/laravelapp.json | 55 ++ resources/templates/json/laravelpackage.json | 56 ++ .../templates/json/laravelpostgresql.json | 55 ++ resources/templates/json/phppackage.json | 56 ++ resources/views/action_yaml.blade.php | 134 +++++ resources/views/components/button.blade.php | 17 + .../views/components/card-template.blade.php | 30 ++ .../views/components/daisyui/button.blade.php | 21 + .../views/components/daisyui/header.blade.php | 21 + resources/views/components/footer.blade.php | 104 ++++ .../components/form/input-checkbox.blade.php | 24 + .../form/input-conditional-checkbox.blade.php | 27 + .../components/form/input-select.blade.php | 34 ++ .../components/form/input-text.blade.php | 24 + .../views/components/icons/laravel.blade.php | 1 + .../views/components/icons/php.blade.php | 95 ++++ .../views/components/separator-line.blade.php | 4 + .../views/components/table/link.blade.php | 5 + resources/views/components/table/td.blade.php | 7 + resources/views/components/table/th.blade.php | 7 + .../views/components/table/title.blade.php | 3 + resources/views/configurator/about.blade.php | 201 +++++++ resources/views/configurator/index.blade.php | 42 ++ resources/views/dashboard/index.blade.php | 56 ++ .../livewire/configurator-form.blade.php | 449 ++++++++++++++++ .../views/livewire/dashboard/daily.blade.php | 37 ++ .../views/livewire/dashboard/latest.blade.php | 58 ++ .../livewire/dashboard/metrics.blade.php | 53 ++ .../views/livewire/dashboard/top.blade.php | 61 +++ .../livewire/form/code-quality.blade.php | 134 +++++ .../views/livewire/form/deploy.blade.php | 52 ++ .../livewire/form/laravel-stuff.blade.php | 74 +++ resources/views/welcome.blade.php | 172 ------ resources/views/yaml/code_quality.blade.php | 90 ++++ resources/views/yaml/deploy_forge.blade.php | 13 + resources/views/yaml/deploy_ploi.blade.php | 12 + resources/views/yaml/deploy_vapor.blade.php | 7 + resources/views/yaml/header.blade.php | 2 + resources/views/yaml/mysql_service.blade.php | 28 + resources/views/yaml/on.blade.php | 31 ++ .../views/yaml/postgresql_service.blade.php | 26 + resources/views/yaml/set_env.blade.php | 43 ++ routes/web.php | 31 +- 70 files changed, 4659 insertions(+), 247 deletions(-) create mode 100644 app/Console/Commands/GenerateWorkflow.php create mode 100644 app/Http/Controllers/ConfiguratorController.php create mode 100644 app/Http/Controllers/DashboardController.php create mode 100644 app/Http/Livewire/ConfiguratorForm.php create mode 100644 app/Http/Livewire/Dashboard/Daily.php create mode 100644 app/Http/Livewire/Dashboard/Latest.php create mode 100644 app/Http/Livewire/Dashboard/Metrics.php create mode 100644 app/Http/Livewire/Dashboard/Top.php create mode 100644 app/Http/Resources/ConfigurationCollection.php create mode 100644 app/Http/Resources/ConfigurationResource.php create mode 100644 app/Models/Configuration.php create mode 100644 app/Models/LogConfiguration.php create mode 100644 app/Objects/GuesserFiles.php create mode 100644 app/Objects/ReportExecution.php create mode 100644 app/Objects/WorkflowGenerator.php create mode 100644 app/Providers/ViewServiceProvider.php create mode 100644 app/Traits/Form/BaseWorkflow.php create mode 100644 app/Traits/Form/CodeQuality.php create mode 100644 app/Traits/Form/Deploy.php create mode 100644 app/Traits/Form/LaravelStuff.php create mode 100644 app/View/Composers/AppDataComposer.php create mode 100644 resources/templates/json/laravelapp.json create mode 100644 resources/templates/json/laravelpackage.json create mode 100644 resources/templates/json/laravelpostgresql.json create mode 100644 resources/templates/json/phppackage.json create mode 100644 resources/views/action_yaml.blade.php create mode 100644 resources/views/components/button.blade.php create mode 100644 resources/views/components/card-template.blade.php create mode 100644 resources/views/components/daisyui/button.blade.php create mode 100644 resources/views/components/daisyui/header.blade.php create mode 100644 resources/views/components/footer.blade.php create mode 100644 resources/views/components/form/input-checkbox.blade.php create mode 100644 resources/views/components/form/input-conditional-checkbox.blade.php create mode 100644 resources/views/components/form/input-select.blade.php create mode 100644 resources/views/components/form/input-text.blade.php create mode 100644 resources/views/components/icons/laravel.blade.php create mode 100644 resources/views/components/icons/php.blade.php create mode 100644 resources/views/components/separator-line.blade.php create mode 100644 resources/views/components/table/link.blade.php create mode 100644 resources/views/components/table/td.blade.php create mode 100644 resources/views/components/table/th.blade.php create mode 100644 resources/views/components/table/title.blade.php create mode 100644 resources/views/configurator/about.blade.php create mode 100644 resources/views/configurator/index.blade.php create mode 100644 resources/views/dashboard/index.blade.php create mode 100644 resources/views/livewire/configurator-form.blade.php create mode 100644 resources/views/livewire/dashboard/daily.blade.php create mode 100644 resources/views/livewire/dashboard/latest.blade.php create mode 100644 resources/views/livewire/dashboard/metrics.blade.php create mode 100644 resources/views/livewire/dashboard/top.blade.php create mode 100644 resources/views/livewire/form/code-quality.blade.php create mode 100644 resources/views/livewire/form/deploy.blade.php create mode 100644 resources/views/livewire/form/laravel-stuff.blade.php delete mode 100644 resources/views/welcome.blade.php create mode 100644 resources/views/yaml/code_quality.blade.php create mode 100644 resources/views/yaml/deploy_forge.blade.php create mode 100644 resources/views/yaml/deploy_ploi.blade.php create mode 100644 resources/views/yaml/deploy_vapor.blade.php create mode 100644 resources/views/yaml/header.blade.php create mode 100644 resources/views/yaml/mysql_service.blade.php create mode 100644 resources/views/yaml/on.blade.php create mode 100644 resources/views/yaml/postgresql_service.blade.php create mode 100644 resources/views/yaml/set_env.blade.php diff --git a/app/Console/Commands/GenerateWorkflow.php b/app/Console/Commands/GenerateWorkflow.php new file mode 100644 index 0000000..2a0d57a --- /dev/null +++ b/app/Console/Commands/GenerateWorkflow.php @@ -0,0 +1,314 @@ +line(str_pad('', strlen($title) + 12, '*'), 'info'); + $this->line('*** '.$title.' ***', 'info'); + $this->line(str_pad('', strlen($title) + 12, '*'), 'info'); + $this->newLine(); + $this->line('For auto generating the GitHub Actions Workflow,'); + $this->line("I'm going to analyze the project requirements..."); + $this->newLine(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $reportExecution = new ReportExecution(); + $this->saveFile = false; + $dryRun = $this->option('dry-run'); + $projectdir = $this->option('projectdir'); + if (is_null($projectdir)) { + $projectdir = ''; + } else { + $projectdir = rtrim($projectdir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + } + $yamlFile = $this->option('save'); + $this->saveFile = ! is_null($yamlFile); + if ($this->saveFile) { + if ($yamlFile === 'auto') { + $yamlFile = GuesserFiles::generateYamlFilename(GuesserFiles::getGithubWorkflowDirectory($projectdir)); + } + if (file_exists($yamlFile)) { + $this->alert('File '.$yamlFile.' exists'); + + return; + } + } + + $cache = $this->option('cache'); + $optionEnvWorkflowFile = $this->option('envfile'); + + $guesserFiles = new GuesserFiles(); + $guesserFiles->pathFiles($projectdir, $optionEnvWorkflowFile); + + //$this->line("Composer : " . $guesserFiles->getComposerPath()); + if (! $guesserFiles->composerExists()) { + $this->error('Composer file not found'); + + return -1; + } + + $generator = new WorkflowGenerator(); + $generator->loadDefaults(); + + if ($guesserFiles->composerExists()) { /** @phpstan-ignore-line */ + $reportExecution->addValueInfo('Composer file', 'Loaded'); + $composer = json_decode(file_get_contents($guesserFiles->getComposerPath()), true); + $generator->name = Arr::get($composer, 'name', ''); + $reportExecution->addValueInfo('Project name', $generator->name); + $yamlFile = GuesserFiles::generateYamlFilename( + GuesserFiles::getGithubWorkflowDirectory($projectdir), + $generator->name + ); + + $phpversion = Arr::get($composer, 'require.php', '8.0'); + + $stepPhp = $generator->detectPhpVersion($phpversion); + $reportExecution->addValueInfo('PHP versions', $stepPhp); + + $optionPreferSelected = $this->option('prefer-stable') || $this->option('prefer-lowest'); + if ($this->option('prefer-stable') && $this->option('prefer-lowest')) { + $generator->dependencyStability = ['prefer-stable', 'prefer-lowest']; + } elseif ($this->option('prefer-lowest')) { + $generator->dependencyStability = ['prefer-lowest']; + } elseif ($this->option('prefer-stable')) { + $generator->dependencyStability = ['prefer-stable']; + } else { + $generator->dependencyStability = ['prefer-none']; + } + if ($optionPreferSelected) { + $reportExecution->addValueInfo('Dependency stability', $generator->dependencyStability); + } else { + $reportExecution->addValueComment('Dependency stability', 'Not selected'); + } + + // detect packages + $devPackages = Arr::get($composer, 'require-dev'); + // testbench + $testbenchVersions = Arr::get($devPackages, 'orchestra/testbench', ''); + if ($testbenchVersions !== '') { + $laravelVersions = GuesserFiles::detectLaravelVersionFromTestbench($testbenchVersions); + $generator->matrixLaravel = true; + $generator->matrixLaravelVersions = $laravelVersions; + $reportExecution->addValueInfo('Laravel versions', $laravelVersions); + } else { + $reportExecution->addValueComment('Laravel', 'No testbench detected'); + } + // squizlabs/php_codesniffer + $phpCodesniffer = Arr::get($devPackages, 'squizlabs/php_codesniffer', ''); + if ($phpCodesniffer !== '') { + $generator->stepExecuteCodeSniffer = true; + $generator->stepInstallCodeSniffer = false; + $reportExecution->addValueInfo('Code sniffer', 'Detected'); + } else { + $reportExecution->addValueComment('Code sniffer', 'Not detected'); + } + // nunomaduro/larastan + $larastan = Arr::get($devPackages, 'nunomaduro/larastan', ''); + if ($larastan !== '') { + $generator->stepExecuteStaticAnalysis = true; + $generator->stepInstallStaticAnalysis = false; + $generator->stepToolStaticAnalysis = 'larastan'; + $generator->stepPhpstanUseNeon = $guesserFiles->phpstanNeonExists(); + $reportExecution->addValueInfo('Static code analysis', 'Larastan and PHPStan'); + } else { + $phpstan = Arr::get($devPackages, 'phpstan/phpstan', ''); + if ($phpstan !== '') { + $generator->stepExecuteStaticAnalysis = true; + $generator->stepInstallStaticAnalysis = false; + $generator->stepToolStaticAnalysis = 'phpstan'; + $generator->stepPhpstanUseNeon = $guesserFiles->phpstanNeonExists(); + $reportExecution->addValueInfo('Static code analysis', 'PHPStan'); + } else { + $reportExecution->addValueComment('Static code analysis', 'Not detected'); + } + } + $generator->stepDusk = false; + // phpunit/phpunit + $generator->stepExecutePhpunit = false; + $phpunit = Arr::get($devPackages, 'phpunit/phpunit', ''); + if ($phpunit !== '') { + $generator->stepExecutePhpunit = true; + $reportExecution->addValueInfo('Automated test', 'PHPUnit'); + } + // phpunit/phpunit + $generator->stepExecutePestphp = false; + $pestphp = Arr::get($devPackages, 'pestphp/pest', ''); + if ($pestphp !== '') { + $generator->stepExecutePestphp = true; + $reportExecution->addValueInfo('Automated test', 'PestPHP'); + } + if ($pestphp === '' && $phpunit === '') { + $reportExecution->addValueComment('Automated test', 'Not detected'); + } + } else { + $reportExecution->addValueComment('Composer file', 'not found'); + } + + $generator->detectCache($cache); + if ($cache) { + $reportExecution->addValueInfo('Caching packages', 'Yes cache'); + } else { + $reportExecution->addValueComment('Caching packages', 'No cache'); + } + + $generator->databaseType = WorkflowGenerator::DB_TYPE_NONE; + $generator->stepRunMigrations = false; + + if ($guesserFiles->envExists()) { + $envArray = $generator->readDotEnv($guesserFiles->getEnvPath()); + $databaseType = Arr::get($envArray, 'DB_CONNECTION', ''); + + $generator->databaseType = WorkflowGenerator::DB_TYPE_NONE; + $generator->stepRunMigrations = false; + if ($databaseType === 'mysql') { + $generator->databaseType = WorkflowGenerator::DB_TYPE_MYSQL; + $reportExecution->addValueInfo('Database', 'Mysql service'); + } + if ($databaseType === 'sqlite') { + $generator->databaseType = WorkflowGenerator::DB_TYPE_SQLITE; + $reportExecution->addValueInfo('Database', 'SQLite'); + } + if ($databaseType === 'postgresql') { + $generator->databaseType = WorkflowGenerator::DB_TYPE_POSTGRESQL; + $reportExecution->addValueInfo('Database', 'PostgreSQL service'); + } + if ($generator->databaseType !== WorkflowGenerator::DB_TYPE_NONE) { + $migrationFiles = scandir($guesserFiles->getMigrationsPath()); + if (count($migrationFiles) > 4) { + $generator->stepRunMigrations = true; + $reportExecution->addValueInfo('Migrations', 'Detected'); + } else { + $reportExecution->addValueComment('Migrations', 'Not detected'); + } + } else { + $reportExecution->addValueComment('Database', 'No database'); + } + } + if ($guesserFiles->packageExists()) { + $generator->stepNodejs = true; + $generator->stepNodejsVersion = '18.x'; + $versionFromNvmrc = $generator->readNvmrc($guesserFiles + ->getNvmrcPath()); + if ($versionFromNvmrc !== '') { + $generator->stepNodejsVersion = $versionFromNvmrc; + } + $reportExecution->addValueInfo('NodeJS/Npm', 'Detected, version '.$generator->stepNodejsVersion); + } else { + $reportExecution->addValueComment('NodeJS/Npm', 'Not Detected'); + } + $appKey = ''; + $generator->stepGenerateKey = false; + + if ($guesserFiles->envDefaultTemplateExists()) { + $generator->stepCopyEnvTemplateFile = true; + $reportExecution->addValueInfo('.env file', 'Detected'); + $generator->stepEnvTemplateFile = $optionEnvWorkflowFile; + // Generate Key + $envArray = $generator->readDotEnv($guesserFiles->getEnvDefaultTemplatePath()); + $appKey = Arr::get($envArray, 'APP_KEY', ''); + + $generator->stepGenerateKey = $appKey === ''; + if ($generator->stepGenerateKey) { + $reportExecution->addValueInfo('Laravel App Key', 'Will be generated'); + } + } else { + $reportExecution->addValueComment('.env file', 'Not detected'); + $generator->stepCopyEnvTemplateFile = false; + } + $generator->stepFixStoragePermissions = false; + if ($guesserFiles->artisanExists()) { + //artisan file so:ENV_TEMPLATE_FILE_DEFAULT. + // fix storage permissions + $generator->stepFixStoragePermissions = true; + } + if ($generator->stepFixStoragePermissions) { + $reportExecution->addValueInfo('Laravel Fix storage permissions', 'Chmod will be executed'); + } + + $data = $generator->setData(); + + $result = $generator->generate($data); + if ($dryRun) { + $this->title('Ghygen'); + $this->table(['Report', 'Status'], $reportExecution->toArrayLabelValue()); + } else { + if ($this->saveFile) { + try { + $size = file_put_contents($yamlFile, $result); + $this->title('Ghygen'); + $this->table(['Report', 'status'], $reportExecution->toArrayLabelValue()); + $this->info('File '.$yamlFile); + $this->info('File created ('.$size.' bytes)'); + } catch (\Exception $e) { + if (! GuesserFiles::existsGithubWorkflowDirectory($projectdir)) { + $this->error( + "Workflow directory doesn't exist : ". + GuesserFiles::getGithubWorkflowDirectory($projectdir) + ); + $this->info( + 'Hint: create Workflow directory: '. + GuesserFiles::getGithubWorkflowDirectory($projectdir) + ); + } else { + $this->error($e->getMessage()); + } + } + } else { + $this->line($result); + } + } + + return 0; + } +} diff --git a/app/Http/Controllers/ConfiguratorController.php b/app/Http/Controllers/ConfiguratorController.php new file mode 100644 index 0000000..9f7705c --- /dev/null +++ b/app/Http/Controllers/ConfiguratorController.php @@ -0,0 +1,19 @@ + config('gh-action-yaml-generator.data.title_about'), + 'description' => config('gh-action-yaml-generator.data.description'), + ]); + } +} diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..113690e --- /dev/null +++ b/app/Http/Controllers/DashboardController.php @@ -0,0 +1,11 @@ + + */ + protected $queryString = [ + 'code' => ['except' => ''], + 'template' => ['except' => ''], + ]; + + public string $result; + + public string $errorGeneration; + + /** + * @var array + */ + public $hints; + + /** + * @var array + */ + protected $rules = [ + 'name' => 'required|string', + 'onPushBranches' => 'exclude_unless:onPush,1|required', + 'onPullrequestBranches' => 'exclude_unless:onPullrequest,1|required', + 'mysqlVersion' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_MYSQL.'|required', + 'mysqlDatabaseName' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_MYSQL.'|required', + 'mysqlDatabasePort' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_MYSQL.'|required|integer', + 'postgresqlVersion' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_POSTGRESQL.'|required', + 'postgresqlDatabaseName' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_POSTGRESQL.'|required', + 'postgresqlDatabasePort' => 'exclude_unless:databaseType,'.WorkflowGenerator::DB_TYPE_POSTGRESQL.'|required|integer', + + 'matrixLaravelVersions' => 'exclude_unless:matrixLaravel,1|required', + ]; + + private function loadDefaults(): void + { + $this->loadDefaultsBaseWorkflow(); + $this->loadDefaultsCodeQuality(); + $this->loadDefaultsLaravelStuff(); + $this->loadDefaultsDeploy(); + } + + private function loadFromJson(object $j): void + { + $this->loadBaseWorkflowFromJson($j); + $this->loadCodeQualityFromJson($j); + $this->loadLaravelStuffFromJson($j); + $this->loadDeployFromJson($j); + } + + public function mount(): void + { + $this->fill(request()->only('code')); + Log::debug(__METHOD__.' Code : '.$this->code); + $codeNotFound = false; + $this->loadDefaults(); + if ($this->template != '') { + $this->template($this->template); + } + if ($this->code != '') { + $confModel = Configuration::getByCode($this->code); + if ($confModel) { + $j = $confModel->configuration; + $this->loadFromJson($j); + } else { + $codeNotFound = true; + } + } + $this->result = ' '; + $this->errorGeneration = ''; + + $this->hints = []; + if ($codeNotFound) { + $this->hints[] = 'The Code : '.$this->code.' was not found. So the default configuration was loaded.'; + } + } + + public function updated(string $propertyName): void + { + $this->result = ' '; + } + + public function template(string $x): void + { + if (in_array($x, ['laravelapp', 'laravelpostgresql', 'laravelpackage', 'phppackage'])) { + $this->template = $x; + $this->code = ''; + $j = json_decode(file_get_contents(resource_path('templates/json/'.$x.'.json'))); + $this->loadFromJson($j); + } else { + $this->template = ''; + } + } + + /** + * @return void + */ + public function submitForm() + { + try { + $this->rateLimit(60); + } catch (TooManyRequestsException $exception) { + $this->addError( + 'yaml', + 'Slow down! Please wait another '. + $exception->secondsUntilAvailable. + ' seconds to generate a new yaml workflow.' + ); + + return; + } + Log::debug('Code:'.$this->code); + $values = $this->getDataForValidation($this->rules); + $this->validate(); + if ( + ! $values['onPush'] && ! $values['onPullrequest'] + && ! $values['manualTrigger'] && ! $values['onSchedule'] + ) { + $this->addError('onEvents', 'You need to select at least one of GitHub event that triggers the workflow'); + + return; + } + + // Provide some suggestions + $this->hints = []; + if ($values['databaseType'] !== WorkflowGenerator::DB_TYPE_NONE and ! $values['stepRunMigrations']) { + $this->hints[] = 'I suggest you to select run migration if you have a Database'; + } + if ($values['databaseType'] === WorkflowGenerator::DB_TYPE_NONE and $values['stepRunMigrations']) { + $this->hints[] = 'I suggest you to select a Database if you want to run migrations'; + } + if ($values['stepDusk'] and ! $values['stepNodejs']) { + $this->hints[] = "I suggest you to select 'Install node for NPM Build' if you have 'Execute Browser tests'"; + } + if ($values['onPush'] and $values['onPullrequest'] and $values['manualTrigger']) { + $hint = "You selected all 3 options: 'on Push', 'on Pull Request', and 'Manual Trigger'."; + $hint = $hint." I suggest you to select 'Manual Trigger' OR 'on push / on pull request'."; + $this->hints[] = $hint; + $this->hints[] = "I selected automatically a 'Manual Trigger' for you."; + } + + $data = $this->setDataBaseWorkflow([]); + $data = $this->setDataCodeQuality($data); + $data = $this->setDataLaravelStuff($data); + $data = $this->setDeployData($data); + + $stringResult = view('action_yaml', $data)->render(); + $this->errorGeneration = ''; + try { + $array = Yaml::parse($stringResult); + } catch (ParseException $e) { + $this->errorGeneration = $e->getMessage(); + $this->result = $stringResult; + $this->addError('yaml', $e->getMessage()); + + return; + } + try { + $json = json_encode($array); + //$compressed = gzdeflate($json, 9); + $hashCode = md5($json); + Configuration::saveConfiguration($hashCode, $data); + $this->code = $hashCode; + $seconds = 60 * 60 * 3; // 3 hours + $schema = Cache::remember('cache-schema-yaml', $seconds, function () { + //return Schema::import('https://json.schemastore.org/github-workflow'); + return Schema::import(json_decode(file_get_contents(base_path('github-workflow.json')))); + }); + $schema->in(json_decode($json)); + + // Add Header to the View + $dataHeader = []; + $dataHeader['code'] = $this->code; + $dataHeader['configurationUrl'] = url('/').'?code='.$this->code; + $stringHeaderResult = view('yaml.header', $dataHeader)->render(); + // + + $this->result = $stringHeaderResult.$stringResult; + } catch (\Exception $e) { + $this->errorGeneration = $e->getMessage(); + $this->result = $stringResult; + $this->addError('yaml', $e->getMessage()); + + return; + } + } + + public function render(): \Illuminate\View\View + { + return view('livewire.configurator-form'); + } +} diff --git a/app/Http/Livewire/Dashboard/Daily.php b/app/Http/Livewire/Dashboard/Daily.php new file mode 100644 index 0000000..65cd49c --- /dev/null +++ b/app/Http/Livewire/Dashboard/Daily.php @@ -0,0 +1,35 @@ + + */ + public $daily; + + public function mount(): void + { + $date = DB::raw('DATE(`created_at`) as `date`'); + if (config('database.default') === 'pgsql') { + $date = DB::raw("date_trunc('day', created_at) as date"); + } + $this->daily = LogConfiguration::select([ + $date, + DB::raw('count(*) as count'), + ]) + ->groupBy('date') + ->orderBy('date', 'DESC') // or ASC + ->pluck('count', 'date'); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.dashboard.daily'); + } +} diff --git a/app/Http/Livewire/Dashboard/Latest.php b/app/Http/Livewire/Dashboard/Latest.php new file mode 100644 index 0000000..fbe116e --- /dev/null +++ b/app/Http/Livewire/Dashboard/Latest.php @@ -0,0 +1,24 @@ +latest = Configuration::latest('updated_at')->take(5)->get(); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.dashboard.latest'); + } +} diff --git a/app/Http/Livewire/Dashboard/Metrics.php b/app/Http/Livewire/Dashboard/Metrics.php new file mode 100644 index 0000000..a9a915e --- /dev/null +++ b/app/Http/Livewire/Dashboard/Metrics.php @@ -0,0 +1,46 @@ +count = Configuration::count(); + $this->total = Configuration::sum('counts'); + $this->last4hours = Configuration::where( + 'updated_at', + '>', + Carbon::now()->subHours(3)->toDateTimeString() + )->count(); + $this->last24hours = Configuration::where( + 'updated_at', + '>', + Carbon::now()->subHours(24)->toDateTimeString() + )->count(); + $this->last3days = Configuration::where( + 'updated_at', + '>', + Carbon::now()->subHours(24 * 3)->toDateTimeString() + )->count(); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.dashboard.metrics'); + } +} diff --git a/app/Http/Livewire/Dashboard/Top.php b/app/Http/Livewire/Dashboard/Top.php new file mode 100644 index 0000000..7c39813 --- /dev/null +++ b/app/Http/Livewire/Dashboard/Top.php @@ -0,0 +1,24 @@ + + */ + public $top; + + public function mount(): void + { + $this->top = Configuration::orderBy('counts', 'DESC')->take(5)->get(); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.dashboard.top'); + } +} diff --git a/app/Http/Resources/ConfigurationCollection.php b/app/Http/Resources/ConfigurationCollection.php new file mode 100644 index 0000000..a3f5589 --- /dev/null +++ b/app/Http/Resources/ConfigurationCollection.php @@ -0,0 +1,19 @@ +|\JsonSerializable|array + */ + public function toArray($request) + { + return parent::toArray($request); + } +} diff --git a/app/Http/Resources/ConfigurationResource.php b/app/Http/Resources/ConfigurationResource.php new file mode 100644 index 0000000..b75af25 --- /dev/null +++ b/app/Http/Resources/ConfigurationResource.php @@ -0,0 +1,32 @@ + + */ + public function toArray($request) + { + return [ + 'code' => $this->code, + 'counts' => $this->counts, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + ]; + } +} diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php new file mode 100644 index 0000000..c8dd6f7 --- /dev/null +++ b/app/Models/Configuration.php @@ -0,0 +1,92 @@ + + */ + protected $casts = [ + 'configuration' => 'object', + ]; + + /** + * @return Configuration|null|static + */ + public static function getByCode(string $code) + { + return self::firstWhere('code', $code); + } + + public function isMysqlService(): bool + { + if (isset($this->configuration->mysqlService)) { + return $this->configuration->mysqlService; + } + + return $this->configuration->databaseType === 'mysql'; + } + + public function isSqlite(): bool + { + if (isset($this->configuration->databaseType)) { + return $this->configuration->databaseType === 'sqlite'; + } + + return false; + } + + public function isPostgresqlService(): bool + { + if (isset($this->configuration->databaseType)) { + return $this->configuration->databaseType === 'postgresql'; + } + + return false; + } + + public function getDatabaseType(): string + { + if ($this->isMysqlService()) { + return 'Mysql'; + } + if ($this->isPostgresqlService()) { + return 'Postgresql'; + } + if ($this->isSqlite()) { + return 'Sqlite'; + } + + return ''; + } + + /** + * @param array|object|mixed $json + */ + public static function saveConfiguration(string $code, $json, string $metadata = '{}'): void + { + $confModel = self::getByCode($code); + + if (! $confModel) { + $confModel = new self(); + $confModel->code = $code; + $confModel->configuration = $json; + $confModel->metadata = $metadata; + $confModel->counts = 0; + } + + $confModel->counts = $confModel->counts + 1; + + $confModel->save(); + + LogConfiguration::create([ + 'code' => $code, + ]); + } +} diff --git a/app/Models/LogConfiguration.php b/app/Models/LogConfiguration.php new file mode 100644 index 0000000..6ba847e --- /dev/null +++ b/app/Models/LogConfiguration.php @@ -0,0 +1,13 @@ + + */ + public array $filePaths = []; + + public function pathFiles(string $projectDir, string $optionEnvWorkflowFile = self::ENV_DEFAULT_TEMPLATE_FILE): void + { + $arrayFiles = [ + self::COMPOSER_VAR => self::COMPOSER_FILE, + self::ENV_VAR => self::ENV_FILE, + self::ENV_DEFAULT_TEMPLATE_VAR => self::ENV_DEFAULT_TEMPLATE_FILE, + self::NVMRC_VAR => self::NVMRC_FILE, + self::PACKAGE_VAR => self::PACKAGE_FILE, + self::ARTISAN_VAR => self::ARTISAN_FILE, + self::MIGRATIONS_VAR => self::MIGRATIONS_DIR, + self::PHPSTANNEON_VAR => self::PHPSTANNEON_FILE, + ]; + foreach ($arrayFiles as $variable => $file) { + $this->filePaths[$variable] = base_path($file); + } + + if ($projectDir === '') { + return; + } + + foreach ($arrayFiles as $variable => $file) { + $this->filePaths[$variable] = $projectDir.DIRECTORY_SEPARATOR.$file; + } + } + + public function getComposerPath(): string + { + return Arr::get($this->filePaths, self::COMPOSER_VAR, ''); + } + + public function composerExists(): bool + { + $exists = $this->getComposerPath(); + if ($exists === '') { + return false; + } + + return is_file($this->getComposerPath()); + } + + public function getEnvPath(): string + { + return Arr::get($this->filePaths, self::ENV_VAR, ''); + } + + public function envExists(): bool + { + $exists = $this->getEnvPath(); + if ($exists === '') { + return false; + } + + return is_file($this->getEnvPath()); + } + + public function getEnvDefaultTemplatePath(): string + { + return Arr::get($this->filePaths, self::ENV_DEFAULT_TEMPLATE_VAR, ''); + } + + public function envDefaultTemplateExists(): bool + { + return $this->somethingExists('getEnvDefaultTemplatePath'); + } + + public function getPackagePath(): string + { + return Arr::get($this->filePaths, self::PACKAGE_VAR, ''); + } + + public function packageExists(): bool + { + return $this->somethingExists('getPackagePath'); + } + + public function getNvmrcPath(): string + { + return Arr::get($this->filePaths, self::NVMRC_VAR, ''); + } + + public function nvmrcExists(): bool + { + return $this->somethingExists('getNvmrcPath'); + } + + public function getArtisanPath(): string + { + return Arr::get($this->filePaths, self::ARTISAN_VAR, ''); + } + + public function artisanExists(): bool + { + return $this->somethingExists('getArtisanPath'); + } + + public function getPhpstanNeonPath(): string + { + return Arr::get($this->filePaths, self::PHPSTANNEON_VAR, ''); + } + + public function phpstanNeonExists(): bool + { + return $this->somethingExists('getPhpstanNeonPath'); + } + + public function getMigrationsPath(): string + { + return Arr::get($this->filePaths, self::MIGRATIONS_VAR, ''); + } + + public function migrationsExists(): bool + { + return $this->somethingExists('getMigrationsPath', true); + } + + public function dispatch(string $method): string + { + $callback = [$this, $method]; + if (is_callable($callback)) { + return strval(call_user_func($callback)); + } + + throw new \Exception('Method not found'); + } + + private function somethingExists(string $methodPath, bool $isDirCheck = false): bool + { + //$path = call_user_func(array($this, $methodPath)); + $path = $this->dispatch($methodPath); + $exists = $path; + if ($exists == '') { + return false; + } + if ($isDirCheck) { + return is_dir($path); + } + + return is_file($path); + } + + /** + * @return array + */ + public static function detectLaravelVersionFromTestbench(string $testbenchVersion): array + { + $listLaravelVersions = ['6.*', '7.*', '8.*', '9.*', '10.*']; + $listTestBenchVersions = ['4.0', '5.0', '6.0', '7.0', '8.0']; + $stepLaravelVersions = []; + $i = 0; + + try { + foreach ($listTestBenchVersions as $testbench) { + if (Semver::satisfies($testbench, $testbenchVersion)) { + $stepLaravelVersions[] = $listLaravelVersions[$i]; + } + $i++; + } + } catch (\Exception $e) { + $stepLaravelVersions = []; + } + //$this->ste = $stepPhp; + return $stepLaravelVersions; + } + + public static function generateYamlFilename( + string $path = '', + string $title = '' + ): string { + if ($title === '') { + $title = 'Ghygen Auto Workflow'; + } + $timeStamp = date('Ymd-His'); + $fileName = Str::slug($title, '_').'-'.$timeStamp.'.yml'; + + return $path.$fileName; + } + + public static function getGithubWorkflowDirectory( + string $projectdir = '' + ): string { + return $projectdir.'.github/workflows/'; + } + + public static function existsGithubWorkflowDirectory( + string $projectdir = '' + ): bool { + return is_dir(self::getGithubWorkflowDirectory($projectdir)); + } +} diff --git a/app/Objects/ReportExecution.php b/app/Objects/ReportExecution.php new file mode 100644 index 0000000..26fa215 --- /dev/null +++ b/app/Objects/ReportExecution.php @@ -0,0 +1,167 @@ + + */ + private Collection $result; + + private int $idx = -1; + + public const LINE_TYPE_ERROR = 'error'; + + public const LINE_TYPE_WARNING = 'warning'; + + public const LINE_TYPE_INFO = 'info'; + + public const LINE_TYPE_HINT = 'hint'; + + public const LINE_TYPE_DEFAULT = 'default'; + + public function __construct() + { + $this->reset(); + } + + public function reset(): void + { + $this->result = new Collection(); + $this->idx = -1; + } + + public function addError(string $label, string $value): void + { + $this->add($label, $value, true, self::LINE_TYPE_ERROR); + } + + public function addWarning(string $label, string $value): void + { + $this->add($label, $value, true, self::LINE_TYPE_WARNING); + } + + /** + * @param string|string[] $value + * + * @psalm-param array|string $value + */ + public function addValue(string $label, $value, string $style = ''): void + { + if (is_array($value)) { + $value = implode(',', $value); + } + if ($style !== '') { + $value = sprintf('<%s>%s', $style, $value, $style); + } + $this->add($label, $value, true, self::LINE_TYPE_INFO); + } + + /** + * @param string|string[] $value + * + * @psalm-param array|string $value + */ + public function addValueInfo(string $label, $value): void + { + $this->addValue($label, $value, 'info'); + } + + /** + * @param string|string[] $value + * + * @psalm-param array|string $value + */ + public function addValueComment(string $label, $value): void + { + $this->addValue($label, $value, 'comment'); + } + + public function addHint(string $value): void + { + $this->add('*** HINT', $value, true, self::LINE_TYPE_HINT); + } + + public function addErrorAndHint( + string $label, + string $errorMessage, + string $hintMessage + ): void { + $this->addError($label, $errorMessage); + $this->addHint($hintMessage); + } + + public function addWarningAndHint( + string $label, + string $warningMessage, + string $hintMessage + ): void { + $this->addWarning($label, $warningMessage); + $this->addHint($hintMessage); + } + + public function addInfoAndHint( + string $label, + string $infoMessage, + string $hintMessage + ): void { + $this->addValue($label, $infoMessage); + $this->addHint($hintMessage); + } + + public function add( + string $label, + string $value, + bool $forceLine = false, + string $lineType = self::LINE_TYPE_DEFAULT + ): void { + $this->result->push( + [ + 'label' => $label, + 'value' => $value, + 'isLine' => $forceLine, + 'lineType' => $lineType, + ] + ); + $this->idx++; + } + + public static function isMessageLine(string $lineType): bool + { + return ($lineType === self::LINE_TYPE_ERROR) || + ($lineType === self::LINE_TYPE_WARNING) || + ($lineType === self::LINE_TYPE_INFO); + } + + public static function isHintLine(string $lineType): bool + { + return $lineType === self::LINE_TYPE_HINT; + } + + /** + * @return array + */ + public function toArrayLabelValue(): array + { + $retArray = []; + foreach ($this->result as $r) { + $label = Arr::get($r, 'label', ''); + $value = Arr::get($r, 'value', ''); + $retArray[] = ['label' => $label, 'value' => $value]; + } + + return $retArray; + } + + /** + * @return array + */ + public function toArray(): array + { + return $this->result->toArray(); + } +} diff --git a/app/Objects/WorkflowGenerator.php b/app/Objects/WorkflowGenerator.php new file mode 100644 index 0000000..9c8a398 --- /dev/null +++ b/app/Objects/WorkflowGenerator.php @@ -0,0 +1,180 @@ +loadDefaultsBaseWorkflow(); + $this->loadDefaultsCodeQuality(); + $this->loadDefaultsLaravelStuff(); + $this->loadDefaultsDeploy(); + } + + /** + * @return array + */ + public static function compactObject(object $object, string ...$args): array + { + $vars = get_object_vars($object); + $retVal = []; + foreach ($args as $arg) { + if (array_key_exists($arg, $vars)) { + $retVal[$arg] = $vars[$arg]; + } elseif (array_key_exists(Str::camel($arg), $vars)) { + $retVal[$arg] = $vars[Str::camel($arg)]; + } + } + + return $retVal; + } + + /** + * @param array $array + */ + public static function arrayToString(array $array): string + { + return '[ '.implode( + ',', + array_map( + function ($str) { + return "'$str'"; + }, + $array + ) + ).' ]'; + } + + /** + * @param array|string $somethingToSplit + * @return array|mixed + */ + public static function split($somethingToSplit, string $splitChars = ',') + { + if (\is_string($somethingToSplit)) { + return array_map('trim', explode($splitChars, $somethingToSplit)); + } + + return $somethingToSplit; + } + + /** + * @return array + */ + public function setData(): array + { + $data = []; + $data = $this->setDataBaseWorkflow($data); + $data = $this->setDataCodeQuality($data); + $data = $this->setDataLaravelStuff($data); + $data = $this->setDeployData($data); + + return $data; + } + + /** + * @param array $data + * @return array|string + */ + public function generate(array $data) + { + $stringResult = view('action_yaml', $data)->render(); + + return $stringResult; + } + + /** + * @return string[] + * + * @psalm-return list<'7.3'|'7.4'|'8.0'|'8.1|'8.2'> + */ + public function detectPhpVersion(string $phpversion): array + { + $listPhpVersions = ['7.3', '7.4', '8.0', '8.1', '8.2']; + $stepPhp = []; + foreach ($listPhpVersions as $php) { + if (Semver::satisfies($php, $phpversion)) { + $stepPhp[] = $php; + } + } + $this->stepPhpVersions = $stepPhp; + + return $stepPhp; + } + + /** + * Detect cache, for now the behavior is to disable cache + */ + public function detectCache(bool $cache): void + { + $this->stepCacheNpmModules = $cache; + $this->stepCachePackages = $cache; + $this->stepCacheVendors = $cache; + } + + /** + * @return string[] + * + * @psalm-return array + */ + public function readDotEnv(string $fileEnv): array + { + $envConfiguration = []; + if (! is_readable($fileEnv)) { + throw new \RuntimeException(sprintf('%s file is not readable', $fileEnv)); + } + + $lines = file($fileEnv, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach ($lines as $line) { + if (strpos(trim($line), '#') === 0) { + continue; + } + + [$name, $value] = explode('=', $line, 2); + $name = trim($name); + $value = trim($value); + $envConfiguration[$name] = $value; + } + + return $envConfiguration; + } + + public function readNvmrc(string $fileNvmrc): string + { + if (! is_readable($fileNvmrc)) { + return ''; + } + + $lines = file($fileNvmrc, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach ($lines as $line) { + if (strpos(trim($line), '#') === 0) { + continue; + } + + return $line; + } + + return ''; + } +} diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php new file mode 100644 index 0000000..d1865c5 --- /dev/null +++ b/app/Providers/ViewServiceProvider.php @@ -0,0 +1,23 @@ +|string + */ + public $onPushBranches; + + public bool $onPullrequest; + + /** + * @var array + */ + public array $onPullrequestBranches; + + public bool $manualTrigger; + + public bool $onSchedule; // false + + public string $onScheduleCron; // "0 0 * * *" + + public string $databaseType; // 'none', 'mysql', 'postgresql', 'sqlite' + + public string $mysqlDatabase; + + public string $mysqlPasswordType; // 'skip + + public string $mysqlPassword; // password + + public string $mysqlVersion; + + public string $mysqlDatabaseName; + + public int $mysqlDatabasePort; + + public string $postgresqlDatabase; + + public string $postgresqlPasswordType; // 'skip + + public string $postgresqlPassword; // password + + public string $postgresqlVersion; + + public string $postgresqlDatabaseName; + + public int $postgresqlDatabasePort; + + /** + * @var array + */ + public array $stepPhpVersions; // 8.2 + + public bool $stepNodejs; // false + + public string $stepNodejsVersion; // 18.x + + public bool $stepCachePackages; //true + + public bool $stepCacheVendors; //true + + public bool $stepCacheNpmModules; // true + + /** + * @var array + */ + public array $dependencyStability; // [] + + public function loadDefaultsBaseWorkflow(): void + { + $this->name = 'Test Laravel Github action'; + $this->onPush = true; + $this->onPushBranches = ['main', 'develop', 'features/**']; + $this->onPullrequest = false; + $this->onPullrequestBranches = ['main', 'develop']; + $this->manualTrigger = false; + $this->onSchedule = false; + $this->onScheduleCron = '0 0 * * *'; + $this->databaseType = WorkflowGenerator::DB_TYPE_MYSQL; + $this->mysqlDatabase = 'mysql'; + $this->mysqlPasswordType = 'skip'; + $this->mysqlPassword = 'DB_PASSWORD'; + $this->mysqlVersion = 'latest'; + $this->mysqlDatabaseName = 'db_test_laravel'; + $this->mysqlDatabasePort = 33306; + $this->postgresqlDatabase = 'postgresql'; + $this->postgresqlPasswordType = 'hardcoded'; + $this->postgresqlPassword = 'postgres'; + $this->postgresqlVersion = 'latest'; + $this->postgresqlDatabaseName = 'db_test_laravel'; + $this->postgresqlDatabasePort = 55432; + $this->stepPhpVersions = ['8.2', '8.1', '8.0', '7.4']; + $this->stepNodejs = false; + $this->stepNodejsVersion = '18.x'; + $this->stepCachePackages = true; + $this->stepCacheVendors = true; + $this->stepCacheNpmModules = true; + $this->dependencyStability = ['prefer-none']; + } + + public function loadBaseWorkflowFromJson(object $j): void + { + data_fill($j, 'stepDirCodeSniffer', 'app'); + data_fill($j, 'dependencyStability', ['prefer-none']); + data_fill($j, 'on_schedule', false); + data_fill($j, 'on_schedule_cron', '0 0 * * *'); + $this->name = $j->name; + $this->onPush = $j->on_push; + $this->onPushBranches = $j->on_push_branches; + $this->onPullrequest = $j->on_pullrequest; + $this->onPullrequestBranches = $j->on_pullrequest_branches; + $this->manualTrigger = $j->manual_trigger; + $this->onSchedule = $j->on_schedule; + $this->onScheduleCron = $j->on_schedule_cron; + if (isset($j->mysqlService)) { + if ($j->mysqlService === true) { + $this->databaseType = WorkflowGenerator::DB_TYPE_MYSQL; + } elseif ($j->mysqlService === false) { + $this->databaseType = WorkflowGenerator::DB_TYPE_NONE; + } + } else { + $this->databaseType = $j->databaseType; + } + $this->mysqlDatabase = $j->mysqlDatabase; + $this->mysqlPasswordType = $j->mysqlPasswordType; + $this->mysqlPassword = $j->mysqlPassword; + $this->mysqlVersion = $j->mysqlVersion; + $this->mysqlDatabaseName = $j->mysqlDatabaseName; + $this->mysqlDatabasePort = $j->mysqlDatabasePort; + if (isset($j->postgresqlDatabase)) { + $this->postgresqlDatabase = $j->postgresqlDatabase; + $this->postgresqlPasswordType = + isset($j->postgresqlPasswordType) ? + $j->postgresqlPasswordType : + $this->postgresqlPasswordType; + $this->postgresqlPassword = + isset($j->postgresqlPassword) ? + $j->postgresqlPassword : + $this->postgresqlPassword; + $this->postgresqlVersion = + isset($j->postgresqlVersion) ? + $j->postgresqlVersion : + $this->postgresqlVersion; + $this->postgresqlDatabaseName = + isset($j->postgresqlDatabaseName) ? + $j->postgresqlDatabaseName : + $this->postgresqlDatabaseName; + $this->postgresqlDatabasePort = + isset($j->postgresqlDatabasePort) ? + $j->postgresqlDatabasePort : + $this->postgresqlDatabasePort; + } + $this->stepPhpVersions = $j->stepPhpVersions; + $this->stepNodejs = $j->stepNodejs; + $this->stepNodejsVersion = $j->stepNodejsVersion; + $this->stepCachePackages = $j->stepCachePackages; + $this->stepCacheVendors = $j->stepCacheVendors; + $this->stepCacheNpmModules = $j->stepCacheNpmModules; + $this->dependencyStability = (array) $j->dependencyStability; + } + + /** + * @param array $data + * @return array + */ + public function setDataBaseWorkflow(array $data): array + { + $data = WorkflowGenerator::compactObject( + $this, + 'databaseType', + 'mysqlDatabase', + 'mysqlVersion', + 'mysqlDatabaseName', + 'mysqlDatabasePort', + 'mysqlPassword', + 'mysqlPasswordType', + 'postgresqlDatabase', + 'postgresqlVersion', + 'postgresqlDatabaseName', + 'postgresqlDatabasePort', + 'postgresqlPassword', + 'postgresqlPasswordType', + 'name', + 'on_push', + 'on_push_branches', + 'on_pullrequest', + 'on_pullrequest_branches', + 'manual_trigger', + 'on_schedule', + 'on_schedule_cron', + 'stepPhpVersions', + 'stepNodejs', + 'stepNodejsVersion', + 'stepCachePackages', + 'stepCacheVendors', + 'stepCacheNpmModules' + ); + $data['stepPhpVersionsString'] = WorkflowGenerator::arrayToString($this->stepPhpVersions); + $data['on_pullrequest_branches'] = WorkflowGenerator::split($this->onPullrequestBranches); + $data['on_push_branches'] = WorkflowGenerator::split($this->onPushBranches); + $data['dependencyStabilityString'] = WorkflowGenerator::arrayToString($this->dependencyStability); + $data['dependencyStability'] = $this->dependencyStability; + + return $data; + } +} diff --git a/app/Traits/Form/CodeQuality.php b/app/Traits/Form/CodeQuality.php new file mode 100644 index 0000000..33d7932 --- /dev/null +++ b/app/Traits/Form/CodeQuality.php @@ -0,0 +1,98 @@ +stepExecutePhpunit = true; + $this->stepExecutePestphp = false; + $this->stepSecurityCheck = false; + $this->stepExecuteCodeSniffer = false; + $this->stepDirCodeSniffer = 'app'; + $this->stepInstallCodeSniffer = true; + $this->stepExecuteStaticAnalysis = false; + $this->stepDirStaticAnalysis = 'app'; + $this->stepToolStaticAnalysis = 'larastan'; + $this->stepInstallStaticAnalysis = true; + $this->stepDusk = false; + $this->stepPhpstanUseNeon = false; + $this->stepPsalmReport = false; + } + + public function loadCodeQualityFromJson(object $j): void + { + data_fill($j, 'stepDirCodeSniffer', 'app'); + data_fill($j, 'stepInstallCodeSniffer', true); + data_fill($j, 'stepDirStaticAnalysis', 'app'); + data_fill($j, 'stepInstallStaticAnalysis', true); + data_fill($j, 'stepToolStaticAnalysis', 'larastan'); + data_fill($j, 'stepExecutePestphp', false); + data_fill($j, 'stepPhpstanUseNeon', false); + data_fill($j, 'stepPsalmReport', false); + data_fill($j, 'stepSecurityCheck', false); + $this->stepExecutePhpunit = $j->stepExecutePhpunit; + $this->stepExecutePestphp = $j->stepExecutePestphp; + $this->stepExecuteCodeSniffer = $j->stepExecuteCodeSniffer; + $this->stepDirCodeSniffer = $j->stepDirCodeSniffer; + $this->stepInstallCodeSniffer = $j->stepInstallCodeSniffer; + $this->stepExecuteStaticAnalysis = $j->stepExecuteStaticAnalysis; + $this->stepDirStaticAnalysis = $j->stepDirStaticAnalysis; + $this->stepToolStaticAnalysis = $j->stepToolStaticAnalysis; + $this->stepInstallStaticAnalysis = $j->stepInstallStaticAnalysis; + $this->stepDusk = $j->stepDusk; + $this->stepPhpstanUseNeon = $j->stepPhpstanUseNeon; + $this->stepPsalmReport = $j->stepPsalmReport; + $this->stepSecurityCheck = $j->stepSecurityCheck; + } + + /** + * @param array $data + * @return array + */ + public function setDataCodeQuality(array $data): array + { + $data['stepExecutePhpunit'] = $this->stepExecutePhpunit; + $data['stepExecutePestphp'] = $this->stepExecutePestphp; + $data['stepExecuteCodeSniffer'] = $this->stepExecuteCodeSniffer; + $data['stepDirCodeSniffer'] = $this->stepDirCodeSniffer; + $data['stepInstallCodeSniffer'] = $this->stepInstallCodeSniffer; + $data['stepExecuteStaticAnalysis'] = $this->stepExecuteStaticAnalysis; + $data['stepDirStaticAnalysis'] = $this->stepDirStaticAnalysis; + $data['stepToolStaticAnalysis'] = $this->stepToolStaticAnalysis; + $data['stepInstallStaticAnalysis'] = $this->stepInstallStaticAnalysis; + $data['stepDusk'] = $this->stepDusk; + $data['stepPhpstanUseNeon'] = $this->stepPhpstanUseNeon; + $data['stepPsalmReport'] = $this->stepPsalmReport; + $data['stepSecurityCheck'] = $this->stepSecurityCheck; + + return $data; + } +} diff --git a/app/Traits/Form/Deploy.php b/app/Traits/Form/Deploy.php new file mode 100644 index 0000000..13d25ae --- /dev/null +++ b/app/Traits/Form/Deploy.php @@ -0,0 +1,60 @@ +stepDeployType = 'none'; + $this->stepDeployWebhookType = 'secret'; + $this->stepDeployWebhookUrl = 'WEBHOOK_URL'; + $this->stepDeployForgeServerName = ''; + $this->stepDeployForgeSiteName = ''; + + //$this->stepDeployApiToken = "VAPOR_API_TOKEN"; + } + + public function loadDeployFromJson(object $j): void + { + data_fill($j, 'stepDeployType', 'none'); + data_fill($j, 'stepDeployWebhookType', 'secret'); + data_fill($j, 'stepDeployWebhookUrl', 'WEBHOOK_URL'); + data_fill($j, 'stepDeployForgeServerName', ''); + data_fill($j, 'stepDeployForgeSiteName', ''); + //data_fill($j, "stepDeployApiToken", 'VAPOR_API_TOKEN'); + + $this->stepDeployType = $j->stepDeployType; + $this->stepDeployWebhookType = $j->stepDeployWebhookType; + $this->stepDeployForgeServerName = $j->stepDeployForgeServerName; + $this->stepDeployForgeSiteName = $j->stepDeployForgeSiteName; + //$this->stepDeployApiToken = $j->stepDeployApiToken; + } + + /** + * @param array $data + * @return array + */ + public function setDeployData(array $data) + { + $data['stepDeployType'] = $this->stepDeployType; + $data['stepDeployWebhookType'] = $this->stepDeployWebhookType; + $data['stepDeployWebhookUrl'] = $this->stepDeployWebhookUrl; + $data['stepDeployForgeSiteName'] = $this->stepDeployForgeSiteName; + $data['stepDeployForgeServerName'] = $this->stepDeployForgeServerName; + //$data["stepDeployApiToken"] = $this->stepDeployApiToken; + + return $data; + } +} diff --git a/app/Traits/Form/LaravelStuff.php b/app/Traits/Form/LaravelStuff.php new file mode 100644 index 0000000..ae8b701 --- /dev/null +++ b/app/Traits/Form/LaravelStuff.php @@ -0,0 +1,82 @@ + + */ + public $matrixLaravelVersions; // [] + + /** + * @var array + */ + public array $matrixTestbenchDependencies; + + public function loadDefaultsLaravelStuff(): void + { + $this->stepFixStoragePermissions = true; + $this->stepRunMigrations = true; + $this->stepGenerateKey = true; + $this->stepEnvTemplateFile = '.env.example'; + $this->stepCopyEnvTemplateFile = true; + $this->matrixLaravel = false; + $this->matrixLaravelVersions = []; + $this->matrixTestbenchDependencies = [ + '10.*' => '8.*', + '9.*' => '7.*', + '8.*' => '6.*', + '7.*' => '5.*', + '6.*' => '4.*', + ]; // mapping laravel versions with testbench version as dependency + // the key is the laravel ver, the value is the orchestratestbench version + } + + public function loadLaravelStuffFromJson(object $j): void + { + data_fill($j, 'stepGenerateKey', true); + data_fill($j, 'stepCopyEnvTemplateFile', true); + $this->stepFixStoragePermissions = $j->stepFixStoragePermissions; + $this->stepRunMigrations = $j->stepRunMigrations; + $this->stepGenerateKey = $j->stepGenerateKey; + $this->stepEnvTemplateFile = $j->stepEnvTemplateFile; + $this->stepCopyEnvTemplateFile = $j->stepCopyEnvTemplateFile; + $this->matrixLaravel = $j->matrixLaravel; + $this->matrixLaravelVersions = $j->matrixLaravelVersions; + //$this->matrixTestbenchDependencies = (array) $j->matrixTestbenchDependencies; + } + + /** + * @param array $data + * @return array + */ + public function setDataLaravelStuff(array $data): array + { + $data['stepFixStoragePermissions'] = $this->stepFixStoragePermissions; + $data['stepRunMigrations'] = $this->stepRunMigrations; + $data['stepGenerateKey'] = $this->stepGenerateKey; + $data['stepEnvTemplateFile'] = $this->stepEnvTemplateFile; + $data['stepCopyEnvTemplateFile'] = $this->stepCopyEnvTemplateFile; + $data['matrixLaravel'] = $this->matrixLaravel; + $data['matrixLaravelVersions'] = $this->matrixLaravelVersions; + $data['matrixTestbenchDependencies'] = $this->matrixTestbenchDependencies; + $data['matrixLaravelVersionsString'] = WorkflowGenerator::arrayToString($this->matrixLaravelVersions); + + return $data; + } +} diff --git a/app/View/Composers/AppDataComposer.php b/app/View/Composers/AppDataComposer.php new file mode 100644 index 0000000..5accfe1 --- /dev/null +++ b/app/View/Composers/AppDataComposer.php @@ -0,0 +1,16 @@ +with(compact('title', 'description')); + } +} diff --git a/bootstrap/providers.php b/bootstrap/providers.php index 38b258d..6bdee7e 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -2,4 +2,5 @@ return [ App\Providers\AppServiceProvider::class, + App\Providers\ViewServiceProvider::class, ]; diff --git a/bun.lockb b/bun.lockb index 14318beac62ed4ffce3bf91583abdb1294f895c9..92b4e468cde8ab128274e8a12501c845797c5668 100755 GIT binary patch delta 14152 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 KFcUv#FZmxoWpg6{ delta 11354 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 diff --git a/composer.json b/composer.json index aa9bb8a..7acb041 100644 --- a/composer.json +++ b/composer.json @@ -6,8 +6,13 @@ "license": "MIT", "require": { "php": "^8.2", + "composer/semver": "^3.4", + "danharrin/livewire-rate-limiting": "^1.3", "laravel/framework": "^11.0", - "laravel/tinker": "^2.9" + "laravel/tinker": "^2.9", + "livewire/livewire": "^3.4", + "swaggest/json-schema": "^0.12.42", + "symfony/yaml": "^7.0" }, "require-dev": { "fakerphp/faker": "^1.23", diff --git a/composer.lock b/composer.lock index 8e0d9d3..cea3926 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "837959bc2ad3a48cd5a158a5a0a93d1d", + "content-hash": "95c89d87c4454a1f093b4da03c5fbe82", "packages": [ { "name": "brick/math", @@ -130,6 +130,141 @@ ], "time": "2024-02-09T16:56:22+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": "danharrin/livewire-rate-limiting", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/danharrin/livewire-rate-limiting.git", + "reference": "bf16003f0d977b5a41071526d697eec94ac41735" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/bf16003f0d977b5a41071526d697eec94ac41735", + "reference": "bf16003f0d977b5a41071526d697eec94ac41735", + "shasum": "" + }, + "require": { + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "livewire/livewire": "^3.0", + "livewire/volt": "^1.3", + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DanHarrin\\LivewireRateLimiting\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Apply rate limiters to Laravel Livewire actions.", + "homepage": "https://github.com/danharrin/livewire-rate-limiting", + "support": { + "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", + "source": "https://github.com/danharrin/livewire-rate-limiting" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-01-21T14:53:34+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.2", @@ -1827,6 +1962,81 @@ ], "time": "2024-01-28T23:22:08+00:00" }, + { + "name": "livewire/livewire", + "version": "v3.4.9", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "c65b3f0798ab2c9338213ede3588c3cdf4e6fcc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/c65b3f0798ab2c9338213ede3588c3cdf4e6fcc0", + "reference": "c65b3f0798ab2c9338213ede3588c3cdf4e6fcc0", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.0|^11.0", + "laravel/prompts": "^0.1.6", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "8.20.0|^9.0", + "orchestra/testbench-dusk": "8.20.0|^9.0", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Livewire\\LivewireServiceProvider" + ], + "aliases": { + "Livewire": "Livewire\\Livewire" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.4.9" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-03-14T14:03:32+00:00" + }, { "name": "monolog/monolog", "version": "3.5.0", @@ -2328,6 +2538,54 @@ ], "time": "2024-03-06T16:17:14+00:00" }, + { + "name": "phplang/scope-exit", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/phplang/scope-exit.git", + "reference": "239b73abe89f9414aa85a7ca075ec9445629192b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phplang/scope-exit/zipball/239b73abe89f9414aa85a7ca075ec9445629192b", + "reference": "239b73abe89f9414aa85a7ca075ec9445629192b", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpLang\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "authors": [ + { + "name": "Sara Golemon", + "email": "pollita@php.net", + "homepage": "https://twitter.com/SaraMG", + "role": "Developer" + } + ], + "description": "Emulation of SCOPE_EXIT construct from C++", + "homepage": "https://github.com/phplang/scope-exit", + "keywords": [ + "cleanup", + "exit", + "scope" + ], + "support": { + "issues": "https://github.com/phplang/scope-exit/issues", + "source": "https://github.com/phplang/scope-exit/tree/master" + }, + "time": "2016-09-17T00:15:18+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.2", @@ -3119,6 +3377,100 @@ ], "time": "2023-11-08T05:53:05+00:00" }, + { + "name": "swaggest/json-diff", + "version": "v3.10.5", + "source": { + "type": "git", + "url": "https://github.com/swaggest/json-diff.git", + "reference": "17bfc66b330f46e12a7e574133497a290cd79ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swaggest/json-diff/zipball/17bfc66b330f46e12a7e574133497a290cd79ba5", + "reference": "17bfc66b330f46e12a7e574133497a290cd79ba5", + "shasum": "" + }, + "require": { + "ext-json": "*" + }, + "require-dev": { + "phperf/phpunit": "4.8.37" + }, + "type": "library", + "autoload": { + "psr-4": { + "Swaggest\\JsonDiff\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Viacheslav Poturaev", + "email": "vearutop@gmail.com" + } + ], + "description": "JSON diff/rearrange/patch/pointer library for PHP", + "support": { + "issues": "https://github.com/swaggest/json-diff/issues", + "source": "https://github.com/swaggest/json-diff/tree/v3.10.5" + }, + "time": "2023-11-17T11:12:46+00:00" + }, + { + "name": "swaggest/json-schema", + "version": "v0.12.42", + "source": { + "type": "git", + "url": "https://github.com/swaggest/php-json-schema.git", + "reference": "d23adb53808b8e2da36f75bc0188546e4cbe3b45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swaggest/php-json-schema/zipball/d23adb53808b8e2da36f75bc0188546e4cbe3b45", + "reference": "d23adb53808b8e2da36f75bc0188546e4cbe3b45", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4", + "phplang/scope-exit": "^1.0", + "swaggest/json-diff": "^3.8.2", + "symfony/polyfill-mbstring": "^1.19" + }, + "require-dev": { + "phperf/phpunit": "4.8.37" + }, + "suggest": { + "ext-mbstring": "For better performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "Swaggest\\JsonSchema\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Viacheslav Poturaev", + "email": "vearutop@gmail.com" + } + ], + "description": "High definition PHP structures with JSON-schema based validation", + "support": { + "email": "vearutop@gmail.com", + "issues": "https://github.com/swaggest/php-json-schema/issues", + "source": "https://github.com/swaggest/php-json-schema/tree/v0.12.42" + }, + "time": "2023-09-12T14:43:42+00:00" + }, { "name": "symfony/clock", "version": "v7.0.5", @@ -5415,6 +5767,77 @@ ], "time": "2024-02-15T11:33:06+00:00" }, + { + "name": "symfony/yaml", + "version": "v7.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "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/v7.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T15:02:46+00:00" + }, { "name": "tijsverkoyen/css-to-inline-styles", "version": "v2.2.7", @@ -8799,77 +9222,6 @@ ], "time": "2024-02-09T16:08:40+00:00" }, - { - "name": "symfony/yaml", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "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/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T15:02:46+00:00" - }, { "name": "ta-tikoma/phpunit-architecture-test", "version": "0.8.4", diff --git a/package.json b/package.json index 667bd94..7d6547e 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build": "vite build" }, "devDependencies": { + "@tailwindcss/typography": "^0.5.10", "autoprefixer": "^10.4.18", "axios": "^1.6.4", "daisyui": "latest", @@ -13,5 +14,9 @@ "postcss": "^8.4.35", "tailwindcss": "^3.4.1", "vite": "^5.0" + }, + "dependencies": { + "clipboard": "^2.0.11", + "highlight.js": "^11.9.0" } } diff --git a/resources/js/app.js b/resources/js/app.js index e59d6a0..a71cb76 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1 +1,15 @@ import './bootstrap'; + +//import Alpine from 'alpinejs'; +//window.Alpine = Alpine; +//Alpine.start(); + +// Highlight code blocks and line numbers +import hljs from 'highlight.js/lib/core'; +import yamlH from 'highlight.js/lib/languages/yaml' +hljs.registerLanguage('yaml', yamlH); +window.hljs = hljs; + +// Clipboard +import ClipboardJS from 'clipboard'; +new ClipboardJS('.copy-btn'); diff --git a/resources/templates/json/laravelapp.json b/resources/templates/json/laravelapp.json new file mode 100644 index 0000000..a6f353a --- /dev/null +++ b/resources/templates/json/laravelapp.json @@ -0,0 +1,55 @@ +{ + "name": "Template - Laravel application (Mysql)", + "on_push": true, + "stepDusk": false, + "stepNodejs": "1", + "databaseType": "mysql", + "mysqlVersion": "latest", + "matrixLaravel": false, + "mysqlDatabase": "mysql", + "mysqlPassword": "DB_PASSWORD", + "manual_trigger": false, + "on_pullrequest": false, + "stepGenerateKey": true, + "stepPhpVersions": [ + "8.2", + "8.1" + ], + "on_push_branches": [ + "main", + "develop", + "features/**" + ], + "stepCacheVendors": true, + "mysqlDatabaseName": "db_test_laravel", + "mysqlDatabasePort": 33306, + "mysqlPasswordType": "skip", + "postgresqlVersion": "latest", + "stepCachePackages": true, + "stepNodejsVersion": "18.x", + "stepRunMigrations": true, + "postgresqlDatabase": "postgresql", + "postgresqlPassword": "postgres", + "stepDirCodeSniffer": "app", + "stepExecutePhpunit": true, + "stepCacheNpmModules": true, + "stepEnvTemplateFile": ".env.example", + "matrixLaravelVersions": [], + "stepDirStaticAnalysis": "app", + "stepPhpVersionsString": "[ '8.2','8.1' ]", + "postgresqlDatabaseName": "db_test_laravel", + "postgresqlDatabasePort": 55432, + "postgresqlPasswordType": "hardcoded", + "stepExecuteCodeSniffer": "1", + "stepInstallCodeSniffer": true, + "on_pullrequest_branches": [ + "main", + "develop" + ], + "stepCopyEnvTemplateFile": true, + "stepExecuteStaticAnalysis": "1", + "stepFixStoragePermissions": true, + "stepInstallStaticAnalysis": true, + "matrixLaravelVersionsString": "[ ]", + "dependencyStability": [ "prefer-none" ] +} diff --git a/resources/templates/json/laravelpackage.json b/resources/templates/json/laravelpackage.json new file mode 100644 index 0000000..4e67a3e --- /dev/null +++ b/resources/templates/json/laravelpackage.json @@ -0,0 +1,56 @@ +{ + "name": "Template - Laravel package", + "on_push": true, + "stepDusk": false, + "stepNodejs": false, + "databaseType": "none", + "mysqlVersion": "latest", + "matrixLaravel": false, + "mysqlDatabase": "mysql", + "mysqlPassword": "DB_PASSWORD", + "manual_trigger": false, + "on_pullrequest": false, + "stepGenerateKey": false, + "stepPhpVersions": [ + "8.2", + "8.1" + ], + "on_push_branches": [ + "main", + "develop", + "features/**" + ], + "stepCacheVendors": false, + "mysqlDatabaseName": "db_test_laravel", + "mysqlDatabasePort": 33306, + "mysqlPasswordType": "skip", + "postgresqlVersion": "latest", + "stepCachePackages": false, + "stepNodejsVersion": "18.x", + "stepRunMigrations": false, + "postgresqlDatabase": "postgresql", + "postgresqlPassword": "postgres", + "stepDirCodeSniffer": "src", + "stepExecutePhpunit": true, + "stepCacheNpmModules": false, + "stepEnvTemplateFile": ".env.example", + "matrixLaravel": true, + "matrixLaravelVersions": ["10.*"], + "stepDirStaticAnalysis": "src", + "stepPhpVersionsString": "[ '8.2','8.1' ]", + "postgresqlDatabaseName": "db_test_laravel", + "postgresqlDatabasePort": 55432, + "postgresqlPasswordType": "hardcoded", + "stepExecuteCodeSniffer": "1", + "stepInstallCodeSniffer": true, + "on_pullrequest_branches": [ + "main", + "develop" + ], + "stepCopyEnvTemplateFile": false, + "stepExecuteStaticAnalysis": "1", + "stepFixStoragePermissions": false, + "stepInstallStaticAnalysis": true, + "matrixLaravelVersionsString": "[ '10.*' ]" + +} diff --git a/resources/templates/json/laravelpostgresql.json b/resources/templates/json/laravelpostgresql.json new file mode 100644 index 0000000..f920077 --- /dev/null +++ b/resources/templates/json/laravelpostgresql.json @@ -0,0 +1,55 @@ +{ + "name": "Template - Laravel app with Postgresql", + "on_push": true, + "stepDusk": false, + "stepNodejs": "1", + "databaseType": "postgresql", + "mysqlVersion": "latest", + "matrixLaravel": false, + "mysqlDatabase": "mysql", + "mysqlPassword": "DB_PASSWORD", + "manual_trigger": false, + "on_pullrequest": false, + "stepGenerateKey": true, + "stepPhpVersions": [ + "8.2", + "8.1" + ], + "on_push_branches": [ + "main", + "develop", + "features/**" + ], + "stepCacheVendors": true, + "mysqlDatabaseName": "db_test_laravel", + "mysqlDatabasePort": 33306, + "mysqlPasswordType": "skip", + "postgresqlVersion": "latest", + "stepCachePackages": true, + "stepNodejsVersion": "18.x", + "stepRunMigrations": true, + "postgresqlDatabase": "postgresql", + "postgresqlPassword": "postgres", + "stepDirCodeSniffer": "app", + "stepExecutePhpunit": true, + "stepCacheNpmModules": true, + "stepEnvTemplateFile": ".env.example", + "matrixLaravelVersions": [], + "stepDirStaticAnalysis": "app", + "stepPhpVersionsString": "[ '8.2','8.1' ]", + "postgresqlDatabaseName": "db_test_laravel", + "postgresqlDatabasePort": 55432, + "postgresqlPasswordType": "hardcoded", + "stepExecuteCodeSniffer": "1", + "stepInstallCodeSniffer": true, + "stepToolStaticAnalysis": "larastan", + "on_pullrequest_branches": [ + "main", + "develop" + ], + "stepCopyEnvTemplateFile": true, + "stepExecuteStaticAnalysis": "1", + "stepFixStoragePermissions": true, + "stepInstallStaticAnalysis": true, + "matrixLaravelVersionsString": "[ ]" +} diff --git a/resources/templates/json/phppackage.json b/resources/templates/json/phppackage.json new file mode 100644 index 0000000..dee680b --- /dev/null +++ b/resources/templates/json/phppackage.json @@ -0,0 +1,56 @@ +{ + "name": "Template - PHP Package", + "on_push": true, + "stepDusk": false, + "stepNodejs": false, + "databaseType": "none", + "mysqlVersion": "latest", + "matrixLaravel": false, + "mysqlDatabase": "mysql", + "mysqlPassword": "DB_PASSWORD", + "manual_trigger": false, + "on_pullrequest": false, + "stepGenerateKey": false, + "stepPhpVersions": [ + "8.2", + "8.1" + ], + "on_push_branches": [ + "master", + "main", + "develop", + "features/**" + ], + "stepCacheVendors": false, + "mysqlDatabaseName": "db_test_laravel", + "mysqlDatabasePort": 33306, + "mysqlPasswordType": "skip", + "postgresqlVersion": "latest", + "stepCachePackages": false, + "stepNodejsVersion": "18.x", + "stepRunMigrations": false, + "postgresqlDatabase": "postgresql", + "postgresqlPassword": "postgres", + "stepDirCodeSniffer": "src", + "stepExecutePhpunit": true, + "stepCacheNpmModules": false, + "stepEnvTemplateFile": ".env.example", + "matrixLaravelVersions": [], + "stepDirStaticAnalysis": "src", + "stepPhpVersionsString": "[ '8.2','8.1' ]", + "postgresqlDatabaseName": "db_test_laravel", + "postgresqlDatabasePort": 55432, + "postgresqlPasswordType": "hardcoded", + "stepExecuteCodeSniffer": "1", + "stepInstallCodeSniffer": true, + "stepToolStaticAnalysis": "phpstan", + "on_pullrequest_branches": [ + "main", + "develop" + ], + "stepCopyEnvTemplateFile": false, + "stepExecuteStaticAnalysis": "1", + "stepFixStoragePermissions": false, + "stepInstallStaticAnalysis": true, + "matrixLaravelVersionsString": "[ ]" +} diff --git a/resources/views/action_yaml.blade.php b/resources/views/action_yaml.blade.php new file mode 100644 index 0000000..fa1d5b5 --- /dev/null +++ b/resources/views/action_yaml.blade.php @@ -0,0 +1,134 @@ +name: {{ $name }} +@include('yaml.on') + +jobs: + laravel-tests: + runs-on: ubuntu-latest +@if ( $databaseType === "mysql" ) +@include('yaml.mysql_service') +@endif +@if ( $databaseType === "postgresql" ) +@include('yaml.postgresql_service') +@endif + + strategy: + matrix: + operating-system: [ubuntu-latest] + php-versions: {!! $stepPhpVersionsString !!} + dependency-stability: {!! $dependencyStabilityString !!} +@if ($matrixLaravel) + + laravel: {!! $matrixLaravelVersionsString !!} + include: +@foreach($matrixLaravelVersions as $lv) + - laravel: {{ $lv }} + testbench: {{ $matrixTestbenchDependencies[$lv] }} +@endforeach +@endif + + name: P$@{{ matrix.php-versions }} - L$@{{ matrix.laravel }} - $@{{ matrix.dependency-stability }} - $@{{ matrix.operating-system}} + + steps: + - uses: actions/checkout@v3 +@if ($stepNodejs) + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '{{ $stepNodejsVersion }}' +@if ($stepCacheNpmModules) + - name: Cache node_modules directory + uses: actions/cache@v3 + id: node_modules-cache + with: + path: node_modules + key: $@{{ runner.OS }}-build-$@{{ hashFiles('**/package.json') }}-$@{{ hashFiles('**/package-lock.json') }} + - name: Install NPM packages + if: steps.node_modules-cache.outputs.cache-hit != 'true' + run: npm ci +@else + - name: Install NPM packages + run: npm ci +@endif + - name: Build frontend + run: npm run development +@endif + - name: Install PHP versions + uses: shivammathur/setup-php@v2 + with: + php-version: $@{{ matrix.php-versions }} +@if ($stepCachePackages) + - name: Get Composer Cache Directory 2 + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + - uses: actions/cache@v3 + id: actions-cache + with: + path: $@{{ steps.composer-cache.outputs.dir }} + key: $@{{ runner.os }}-composer-$@{{ hashFiles('**/composer.lock') }} + restore-keys: | + $@{{ runner.os }}-composer- +@endif +@if ($stepCacheVendors) + - name: Cache PHP dependencies + uses: actions/cache@v3 + id: vendor-cache + with: + path: vendor + key: $@{{ runner.OS }}-build-$@{{ hashFiles('**/composer.lock') }} +@endif +@if ($stepCopyEnvTemplateFile) + - name: Copy .env + run: php -r "file_exists('.env') || copy('{{ $stepEnvTemplateFile }}', '.env');" +@endif +@if ($matrixLaravel) + - name: Install Laravel Dependencies + run: | + composer require "laravel/framework:$@{{ matrix.laravel }}" "orchestra/testbench:$@{{ matrix.testbench }}" --no-interaction --no-update + composer update --$@{{ matrix.dependency-stability }} --prefer-dist --no-interaction --no-suggest +@else + - name: Install Dependencies + if: steps.vendor-cache.outputs.cache-hit != 'true' + run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist +@endif + +@if (is_array($dependencyStability) && count($dependencyStability) > 0) + - name: Update Dependencies with latest stable + if: matrix.dependency-stability == 'prefer-stable' + run: composer update --prefer-stable + - name: Update Dependencies with lowest stable + if: matrix.dependency-stability == 'prefer-lowest' + run: composer update --prefer-stable --prefer-lowest +@endif + +@if ($stepGenerateKey) + - name: Generate key + run: php artisan key:generate +@endif +@if ($stepFixStoragePermissions) + - name: Directory Permissions + run: chmod -R 777 storage bootstrap/cache +@endif +@if ($stepRunMigrations) + - name: Run Migrations +@include('yaml.set_env') + + run: php artisan migrate +@endif + + - name: Show dir + run: pwd + - name: PHP Version + run: php --version + +@include('yaml.code_quality') + +@if ($stepDeployType === "ploi") +@include('yaml.deploy_ploi') +@endif +@if ($stepDeployType === "vapor") + @include('yaml.deploy_vapor') +@endif +@if ($stepDeployType === "forge") + @include('yaml.deploy_forge') +@endif diff --git a/resources/views/components/button.blade.php b/resources/views/components/button.blade.php new file mode 100644 index 0000000..77067e6 --- /dev/null +++ b/resources/views/components/button.blade.php @@ -0,0 +1,17 @@ +@props([ +'onClick' => '', +'type' =>'' +] +) + diff --git a/resources/views/components/card-template.blade.php b/resources/views/components/card-template.blade.php new file mode 100644 index 0000000..2d6cb73 --- /dev/null +++ b/resources/views/components/card-template.blade.php @@ -0,0 +1,30 @@ +@props([ +'title' => '', +'description' => '', +'icon' => 'laravel' +] +) + +
+ +
+
+
+
+
+ +
+
+
+
+

{{ $title }}

+

{{ $description }}

+
+ +
+
+ {{ $slot }} +
+
+
+ diff --git a/resources/views/components/daisyui/button.blade.php b/resources/views/components/daisyui/button.blade.php new file mode 100644 index 0000000..d6a8b92 --- /dev/null +++ b/resources/views/components/daisyui/button.blade.php @@ -0,0 +1,21 @@ +@props([ + 'type' => '', + 'id' => '', + 'onClick' => '', + 'classType' => 'primary' + ] +) + + diff --git a/resources/views/components/daisyui/header.blade.php b/resources/views/components/daisyui/header.blade.php new file mode 100644 index 0000000..0dca40f --- /dev/null +++ b/resources/views/components/daisyui/header.blade.php @@ -0,0 +1,21 @@ +@props([ + 'imageUrl' => '', + 'title' => '', + 'description' => '', + ] +) +
+
+
+
+
+ +
+
+
+
+

{{ $title }}

+

{{ $description }}

+
+
+
diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php new file mode 100644 index 0000000..9444c89 --- /dev/null +++ b/resources/views/components/footer.blade.php @@ -0,0 +1,104 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

{{ config("app.name") }}

+
Github Actions Workflow Configurator +

+
+
+ Ghygen + Home + What is Ghygen? +
+
+ Open Source + Source code + Used package: Laralens +
+ +
diff --git a/resources/views/components/form/input-checkbox.blade.php b/resources/views/components/form/input-checkbox.blade.php new file mode 100644 index 0000000..8084bac --- /dev/null +++ b/resources/views/components/form/input-checkbox.blade.php @@ -0,0 +1,24 @@ +@props([ + 'label' => 'Field', + 'id', + 'name', + 'value' => '', + 'help' => '', + 'model' => '', + ] +) + +
+
+ +
+
+

{{ $help}}

+ + + + + diff --git a/resources/views/components/form/input-conditional-checkbox.blade.php b/resources/views/components/form/input-conditional-checkbox.blade.php new file mode 100644 index 0000000..e3838d7 --- /dev/null +++ b/resources/views/components/form/input-conditional-checkbox.blade.php @@ -0,0 +1,27 @@ +@props([ + 'label' => 'Field', + 'id', + 'name', + 'value' => '', + 'help' => '', + 'model' => '', +]) + +
+ +
+ + +
+ +
+ {{ $slot }} + +
+
diff --git a/resources/views/components/form/input-select.blade.php b/resources/views/components/form/input-select.blade.php new file mode 100644 index 0000000..39ddd48 --- /dev/null +++ b/resources/views/components/form/input-select.blade.php @@ -0,0 +1,34 @@ +@props([ +'label' => 'Field', +'id', +'name', +'value' => '', +'list' => [], +'help' => '', +'model' => '', +'multiselect' => 0, +'onChange' => '' +] +) + + + +
+ + + + @if ($help !== "") +

+ {{ $help }} +

+ @endif +
diff --git a/resources/views/components/form/input-text.blade.php b/resources/views/components/form/input-text.blade.php new file mode 100644 index 0000000..dfff2d2 --- /dev/null +++ b/resources/views/components/form/input-text.blade.php @@ -0,0 +1,24 @@ +@props([ + 'label' => 'Field', + 'id', + 'name', + 'value' => '', + 'help' => '', + 'model' => '', + ] +) +
+
+ + + @if ($help !== "") +

+ {{ $help }} +

+ @endif + +
+
diff --git a/resources/views/components/icons/laravel.blade.php b/resources/views/components/icons/laravel.blade.php new file mode 100644 index 0000000..2e42022 --- /dev/null +++ b/resources/views/components/icons/laravel.blade.php @@ -0,0 +1 @@ +merge(['class' => '']) }} viewBox="0 0 50 52" xmlns="http://www.w3.org/2000/svg">Logomark diff --git a/resources/views/components/icons/php.blade.php b/resources/views/components/icons/php.blade.php new file mode 100644 index 0000000..010aa0f --- /dev/null +++ b/resources/views/components/icons/php.blade.php @@ -0,0 +1,95 @@ +merge(['class' => '']) }} id="svg3430" version="1.1" viewBox="0 0 711.20123 383.5975" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg"> + Official PHP Logo + + + + image/svg+xml + + Official PHP Logo + + + Colin Viebrock + + + + + + + + + + + + Copyright Colin Viebrock 1997 - All rights reserved. + + + 1997 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/views/components/separator-line.blade.php b/resources/views/components/separator-line.blade.php new file mode 100644 index 0000000..666db47 --- /dev/null +++ b/resources/views/components/separator-line.blade.php @@ -0,0 +1,4 @@ +
+ diff --git a/resources/views/components/table/link.blade.php b/resources/views/components/table/link.blade.php new file mode 100644 index 0000000..ab6bd73 --- /dev/null +++ b/resources/views/components/table/link.blade.php @@ -0,0 +1,5 @@ +@props([ +'url' => '#', +] +) +{{ $slot }} diff --git a/resources/views/components/table/td.blade.php b/resources/views/components/table/td.blade.php new file mode 100644 index 0000000..1bc95a2 --- /dev/null +++ b/resources/views/components/table/td.blade.php @@ -0,0 +1,7 @@ +@props([ +'align' => 'center', +] +) + + {{ $slot }} + diff --git a/resources/views/components/table/th.blade.php b/resources/views/components/table/th.blade.php new file mode 100644 index 0000000..c95f3b6 --- /dev/null +++ b/resources/views/components/table/th.blade.php @@ -0,0 +1,7 @@ +@props([ +'title' => '', +] +) + + {{ $slot }} + diff --git a/resources/views/components/table/title.blade.php b/resources/views/components/table/title.blade.php new file mode 100644 index 0000000..b52ccba --- /dev/null +++ b/resources/views/components/table/title.blade.php @@ -0,0 +1,3 @@ +

+ {{ $slot }} +

diff --git a/resources/views/configurator/about.blade.php b/resources/views/configurator/about.blade.php new file mode 100644 index 0000000..3ecb577 --- /dev/null +++ b/resources/views/configurator/about.blade.php @@ -0,0 +1,201 @@ + + + + + + + {{ config("app.name") }} - {{ $title }} + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + + + + + + + + + + + + + + +
+
+
+ +

GHYGEN

+

+ {{ $title }} +

+

+ {{ $description }} +

+
+ +
+
+
+
+
+ + + + +
+
+
+
+ MySql Service +
+
+ Setup Mysql Service, for launching tests. It allows execute migrations and configure environment parameters. +
+
+
+ +
+
+
+ + + + +
+
+
+
+ Triggering Events +
+
+ Select triggering events: manually or automatically, when the developer push the code on a specific branch, or a developer create a new Pull Request. +
+
+
+ +
+
+
+ + + + +
+
+
+
+ Matrix versions +
+
+ Select multiple PHP versions (8.0, 7.4, 7.3), multiple Laravel versions (8, 7, 6). +
+
+
+ +
+
+
+ + + + + +
+
+
+
+ Quality Check +
+
+ Execute PHPunit tests, Code sniffer (PSR12), Static code analysis. +
+
+
+
+
+
+
+ + + +
+ +
+
+
+
+ + +

Ghygen allows you creating your Yaml file for GitHub Actions, for Laravel/PHP web application, so you can:

+
    +
  • select triggering events: manually or automatically, when the developer push the code on a specific branch, or a developer create a new Pull Request;
  • +
  • select branches;
  • +
  • enable caching for all vendors;
  • +
  • enable caching PHP packages;
  • +
  • select multiple PHP versions (8.0, 7.4, 7.3);
  • +
  • select multiple Laravel versions (8, 7, 6), useful if you are developing a Laravel Package and you want to test it with multiple Laravel version;
  • +
  • select Node version for NPM (npm run something);
  • +
  • caching node packages;
  • +
  • setup Mysql service;
  • +
  • run migrations;
  • +
  • execute tests via phpunit;
  • +
  • static code analysis;
  • +
  • code sniffer (via phpcs for PSR12 compatibility);
  • +
  • validate Yaml file;
  • +
  • execute Browser Test via Laravel Dusk.
  • +
+

This is a Work In Progress, we are adding new features...

+

If you want to test and use quickly this tool, I deployed the codebase (main branch) on Digital Ocean Platform:

+ +

If you want to start using it locally you can clone the repo and install it following the instructions below.

+

Install

+

Clone source code, enter the new directory and perform a couple of instructions:

+
+
git clone https://github.com/Hi-Folks/gh-actions-yaml-generator.git
+cd gh-actions-yaml-generator
+cp .env.example .env
+composer install
+php artisan key:generate
+npm i
+npm run production
+
+

Then create your database and update the .env file with the right values for DB_* .

+

Once your Database is configured you can execute the migrations:

+
+
php artisan migrate
+

Start development server

+
+
php artisan serve
+
+

Open the browser to the URL: http://127.0.0.1:8000

+

Usage

+

Follow these steps:

+
    +
  • access to the form (by default the URL is http://127.0.0.1:8000 if you run php artisan serve);
  • +
  • fill the form;
  • +
  • click on "Generate Yaml File" button.
  • +
+

github-actions-generator-laravel

+

Next, copy the content of your generated Yaml in a new file in your Laravel project .github/workflows/laravel_workflow.yaml .

+

Commit and push the new file.

+

If you configured "On - Push" you will see the running Actions in your Actions section of your GitHub project.

+
+
+
+
+ +
+ + + + + + diff --git a/resources/views/configurator/index.blade.php b/resources/views/configurator/index.blade.php new file mode 100644 index 0000000..f179b25 --- /dev/null +++ b/resources/views/configurator/index.blade.php @@ -0,0 +1,42 @@ + + + + + + + {{ config("app.name") }} - {{ $title }} + @livewireStyles + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + + + + + + + + + + + +
+ + +
+
+ + +
+
+ +
+ @livewireScripts + + + + + diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php new file mode 100644 index 0000000..96ebc8c --- /dev/null +++ b/resources/views/dashboard/index.blade.php @@ -0,0 +1,56 @@ + + + + + + + {{ config("app.name") }} - {{ $title }} + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + + + + + + + +
+
+
+ +

+ {{ $title }} +

+

+ {{ $description }} +

+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + + + + + diff --git a/resources/views/livewire/configurator-form.blade.php b/resources/views/livewire/configurator-form.blade.php new file mode 100644 index 0000000..643b02e --- /dev/null +++ b/resources/views/livewire/configurator-form.blade.php @@ -0,0 +1,449 @@ +
+ +
+ +
+

Select a workflow template

+ + + Mysql + + + Postgresql + + + + + + PHP + + + + + + Laravel Package + + + + +
+
OR compile some details...
+ +
+
+ @csrf +
+
+ + + @error('name') {{ $message }} @enderror + + +
+ On - GitHub event that triggers the workflow. +
+
+ + + + + @error('onPushBranches') {{ $message }} @enderror +
+
+ + + + + @error('onPullrequestBranches') {{ $message }} @enderror +
+ +
+
+ + +
+
+
+ + + + + @error('onScheduleCron') {{ $message }} @enderror +
+ + @error('onEvents')
{{ $message }}
@enderror +
+
+ +
+ Select Database + + + +
+
+ +
+ + + @error('mysqlVersion') {{ $message }} @enderror +
+
+ + + @error('mysqlDatabaseName') {{ $message }} @enderror +
+
+ + + @error('mysqlDatabasePort') {{ $message }} @enderror +
+
+ + +
+
+ + +
+
+
+
+
+ +
+ + + @error('postgresqlVersion') {{ $message }} @enderror +
+
+ + + @error('postgresqlDatabaseName') {{ $message }} @enderror +
+
+ + + @error('postgresqlDatabasePort') {{ $message }} @enderror +
+
+ + +
+
+ + +
+
+
+ +
+ +
+ Caching +
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ +
+ Environments (PHP / Node) +
+
+ + +
+
+ + + + +
+
+
+ + > + +
+
+
+
+ + + @include('livewire.form.laravel-stuff') + @include('livewire.form.code-quality') + @include('livewire.form.deploy') +
+ +
+
+ + Copy + + + Generate Yaml File + +
+
+ +
+ +
+ @error('yaml') +
+
+ + + + + +
+
+
+ Error +
+
+ {{ $message }} +
+
+
+ + + + @enderror + + @if ($errors->any()) +
+ There was some error during validation. Take a look about your data in the form: +
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + + @foreach ($hints as $hint) + +
+ +
+ + + +
+ +
+ {{ $hint }} +
+
+ @endforeach + + +
+
+
+ Loading + Generating Yaml file, waiting please... +
+ +
+
{{ $result }}
+
+ +
diff --git a/resources/views/livewire/dashboard/daily.blade.php b/resources/views/livewire/dashboard/daily.blade.php new file mode 100644 index 0000000..ab5a80a --- /dev/null +++ b/resources/views/livewire/dashboard/daily.blade.php @@ -0,0 +1,37 @@ +
+
+
+
+ + Daily configurations + + + + + + Date + Counts + + + + + + @foreach($daily as $date => $count) + + + {{ $date }} + + + {{ $count }} + + + + @endforeach + +
+
+
+
+
+ + diff --git a/resources/views/livewire/dashboard/latest.blade.php b/resources/views/livewire/dashboard/latest.blade.php new file mode 100644 index 0000000..945bb0b --- /dev/null +++ b/resources/views/livewire/dashboard/latest.blade.php @@ -0,0 +1,58 @@ +
+
+
+
+ + Latest configurations + + + + + + Code + Title + Database + Updated At + Counts + + + + + + @foreach( $latest as $l) + + + {{ $l->code }} + + + {{ $l->configuration->name }} + + + + + + + {{ $l->getDatabaseType() }} + @if ($l->isMysqlService() ) + {{ $l->configuration->mysqlVersion }} + @endif + @if ($l->isPostgresqlService() ) + {{ $l->configuration->postgresqlVersion }} + @endif + + + + + {{ $l->updated_at }} + + + {{ $l->counts }} + + + @endforeach + +
+
+
+
+
diff --git a/resources/views/livewire/dashboard/metrics.blade.php b/resources/views/livewire/dashboard/metrics.blade.php new file mode 100644 index 0000000..a575f7f --- /dev/null +++ b/resources/views/livewire/dashboard/metrics.blade.php @@ -0,0 +1,53 @@ +
+
+
+
+
+
Unique Configurations
+
{{ $count }}
+
+
+
+
+
+
+
+
+
Total Configurations
+
{{ $total }}
+
+
+
+
+
+
+
+
+
Last 4 Hours
+
{{ $last4hours }}
+
+
+
+
+
+
+
+
+
Last 24 Hours
+
{{ $last24hours }}
+
+
+
+
+
+
+
+
+
Last 3 Days
+
{{ $last3days }}
+
+
+
+
+ +
diff --git a/resources/views/livewire/dashboard/top.blade.php b/resources/views/livewire/dashboard/top.blade.php new file mode 100644 index 0000000..5b3785f --- /dev/null +++ b/resources/views/livewire/dashboard/top.blade.php @@ -0,0 +1,61 @@ +
+ +
+ +
+ +
+ + Most used configurations + + + + + + Code + Title + Database + Updated At + Counts + + + + + + @foreach( $top as $l) + + + {{ $l->code }} + + + {{ $l->configuration->name }} + + + + + + {{ $l->getDatabaseType() }} + @if ($l->isMysqlService() ) + {{ $l->configuration->mysqlVersion }} + @endif + @if ($l->isPostgresqlService() ) + {{ $l->configuration->postgresqlVersion }} + @endif + + + + + + {{ $l->updated_at }} + + + {{ $l->counts }} + + + @endforeach + +
+
+
+
+
diff --git a/resources/views/livewire/form/code-quality.blade.php b/resources/views/livewire/form/code-quality.blade.php new file mode 100644 index 0000000..3dd40ef --- /dev/null +++ b/resources/views/livewire/form/code-quality.blade.php @@ -0,0 +1,134 @@ +
+ Code Quality +
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ + + + + + + +
+ +
+ + + > + + + + +
+ + + + +
+
+ + +
+ +
+ +
+ + + +
+
diff --git a/resources/views/livewire/form/deploy.blade.php b/resources/views/livewire/form/deploy.blade.php new file mode 100644 index 0000000..6447137 --- /dev/null +++ b/resources/views/livewire/form/deploy.blade.php @@ -0,0 +1,52 @@ +
+ Deployment (Experimental feature) + + + +
+
+ +
+ + +
+
+ + +
+
+
+
+
+
+ You need to set a GitHub Secret in settings/secrets/actions/new named VAPOR_API_TOKEN. +
+ Take a look the documentation about Laravel Vapor, Deploying From CI +
+
+
+ +
+
+
+ You need to set some GitHub Secrets ("GitHub > Project Settings > Secrets"): + FORGE_API_TOKEN and SSH_PRIVATE_KEY. +
+ Take a look the documentation about Forge, deploy with Forge CLI. + +
+ + +
+
+ + +
+
+
+
+ +
diff --git a/resources/views/livewire/form/laravel-stuff.blade.php b/resources/views/livewire/form/laravel-stuff.blade.php new file mode 100644 index 0000000..d756e0f --- /dev/null +++ b/resources/views/livewire/form/laravel-stuff.blade.php @@ -0,0 +1,74 @@ +
+ Laravel stuff +
+
+ + + + + + + +
+
+ + + + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php deleted file mode 100644 index abe98dc..0000000 --- a/resources/views/welcome.blade.php +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - Laravel - - - - - - - - - - - - diff --git a/resources/views/yaml/code_quality.blade.php b/resources/views/yaml/code_quality.blade.php new file mode 100644 index 0000000..2ae556d --- /dev/null +++ b/resources/views/yaml/code_quality.blade.php @@ -0,0 +1,90 @@ +# Code quality +@if ($stepExecutePhpunit) + - name: Execute tests (Unit and Feature tests) via PHPUnit +@include('yaml.set_env') + + run: vendor/bin/phpunit --testdox +@endif + +@if ($stepExecutePestphp) + - name: Execute tests (Unit and Feature tests) via PestPHP +@include('yaml.set_env') + + run: vendor/bin/pest +@endif + +@if ($stepSecurityCheck) + - uses: symfonycorp/security-checker-action@v4 +@endif + +@if ($stepExecuteCodeSniffer) + - name: Execute Code Sniffer via phpcs + run: | +@if ($stepInstallCodeSniffer) + composer require --dev squizlabs/php_codesniffer +@endif + vendor/bin/phpcs --standard=PSR12 {{ $stepDirCodeSniffer }} +@endif + +@if ($stepExecuteStaticAnalysis) +@if ($stepToolStaticAnalysis == 'larastan') + - name: Execute Code Static Analysis (PHP Stan + Larastan) + run: | +@if ($stepInstallStaticAnalysis) + composer require --dev nunomaduro/larastan +@endif +@if ($stepPhpstanUseNeon) + vendor/bin/phpstan analyse -c ./phpstan.neon --no-progress +@else + vendor/bin/phpstan analyse {{ $stepDirStaticAnalysis }} -c ./vendor/nunomaduro/larastan/extension.neon --level=4 --no-progress +@endif +@elseif ($stepToolStaticAnalysis == 'psalmlaravel') + - name: Execute Code Static Analysis (PSALM) + run: | +@if ($stepInstallStaticAnalysis) + composer require --dev vimeo/psalm + ./vendor/bin/psalm --init + composer require --dev psalm/plugin-laravel + ./vendor/bin/psalm-plugin enable psalm/plugin-laravel +@endif +@if (! $stepPsalmReport) + vendor/bin/psalm +@else + vendor/bin/psalm --report=result.sarif + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@v2 + with: + # Path to SARIF file relative to the root of the repository + sarif_file: result.sarif +@endif + +@else + - name: Execute Code Static Analysis (PHP Stan) + run: | +@if ($stepInstallStaticAnalysis) + composer require --dev phpstan/phpstan +@endif +@if ($stepPhpstanUseNeon) + vendor/bin/phpstan analyse -c ./phpstan.neon --no-progress +@else + vendor/bin/phpstan analyse {{ $stepDirStaticAnalysis }} --level=4 --no-progress +@endif +@endif +@endif + +@if ($stepDusk) + - name: Browser Test - upgrade and start Chrome Driver + run: | + composer require --dev laravel/dusk + php artisan dusk:chrome-driver --detect + ./vendor/laravel/dusk/bin/chromedriver-linux > /dev/null 2>&1 & + - name: Run Dusk Tests + run: | + php artisan serve > /dev/null 2>&1 & + chmod -R 0755 vendor/laravel/dusk/bin/ +@if ( $stepRunMigrations ) + php artisan migrate +@endif + php artisan dusk +@include('yaml.set_env') +@endif diff --git a/resources/views/yaml/deploy_forge.blade.php b/resources/views/yaml/deploy_forge.blade.php new file mode 100644 index 0000000..45ebdcc --- /dev/null +++ b/resources/views/yaml/deploy_forge.blade.php @@ -0,0 +1,13 @@ +# Deployment Step + - name: Setup SSH + uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: $@{{ secrets.SSH_PRIVATE_KEY }} + - name: Require Forge CLI + run: composer global require laravel/forge-cli + - name: Deploy Site + run: | + forge server:switch {{ $stepDeployForgeServerName }} + forge deploy {{ $stepDeployForgeSiteName}} + env: + FORGE_API_TOKEN: $@{{ secrets.FORGE_API_TOKEN }} diff --git a/resources/views/yaml/deploy_ploi.blade.php b/resources/views/yaml/deploy_ploi.blade.php new file mode 100644 index 0000000..30ffbf9 --- /dev/null +++ b/resources/views/yaml/deploy_ploi.blade.php @@ -0,0 +1,12 @@ +# Deployment Step + - name: Deploy via Ploi + uses: Glennmen/ploi-deploy-action@v1.2.0 + with: +@if ( $stepDeployWebhookType === 'secret' ) + # loaded from secret + webhook_url: $@{{ secrets.WEBHOOK_URL }} +@endif +@if ( $stepDeployWebhookType === 'hardcoded' ) + # loaded hardcoded + webhook_url: {{ $stepDeployWebhookUrl }} +@endif diff --git a/resources/views/yaml/deploy_vapor.blade.php b/resources/views/yaml/deploy_vapor.blade.php new file mode 100644 index 0000000..35a0e92 --- /dev/null +++ b/resources/views/yaml/deploy_vapor.blade.php @@ -0,0 +1,7 @@ +# Deployment Step + - name: Require Vapor CLI + run: composer global require laravel/vapor-cli + - name: Deploy Environment + run: vapor deploy + env: + VAPOR_API_TOKEN: $@{{ secrets.VAPOR_API_TOKEN }} diff --git a/resources/views/yaml/header.blade.php b/resources/views/yaml/header.blade.php new file mode 100644 index 0000000..27d4ac8 --- /dev/null +++ b/resources/views/yaml/header.blade.php @@ -0,0 +1,2 @@ +# GithHub Actions Workflow generated with Ghygen +# Original configuration: {{ $configurationUrl }} diff --git a/resources/views/yaml/mysql_service.blade.php b/resources/views/yaml/mysql_service.blade.php new file mode 100644 index 0000000..3187e47 --- /dev/null +++ b/resources/views/yaml/mysql_service.blade.php @@ -0,0 +1,28 @@ +@if ( $databaseType === "mysql" ) + # Service container Mysql {{ $mysqlDatabase }} + services: + # Label used to access the service container + mysql: + # Docker Hub image (also with version) + image: {{ $mysqlDatabase }}:{{ $mysqlVersion }} + env: +@if ( $mysqlPasswordType === 'skip' ) + MYSQL_ALLOW_EMPTY_PASSWORD: yes +@endif +@if ( $mysqlPasswordType === 'secret' ) + MYSQL_ROOT_PASSWORD: $@{{ secrets.DB_PASSWORD }} +@endif +@if ( $mysqlPasswordType === 'hardcoded' ) + MYSQL_ROOT_PASSWORD: {{ $mysqlPassword }} +@endif + MYSQL_DATABASE: {{ $mysqlDatabaseName }} + ## map the "external" 33306 port with the "internal" 3306 + ports: + - {{ $mysqlDatabasePort }}:3306 + # Set health checks to wait until mysql database has started (it takes some seconds to start) + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 +@endif diff --git a/resources/views/yaml/on.blade.php b/resources/views/yaml/on.blade.php new file mode 100644 index 0000000..a69e334 --- /dev/null +++ b/resources/views/yaml/on.blade.php @@ -0,0 +1,31 @@ +@if ( $manual_trigger ) +on: [ workflow_dispatch ] +@elseif ( $on_schedule ) +on: + schedule: + - cron: '{{ $on_schedule_cron }}' +@else +on: +@if ( $on_push ) + push: + branches: +@foreach ( $on_push_branches as $branch) +@if (Str::startsWith($branch, ['*', '[', '!'])) + - '{{ $branch }}' +@else + - {{ $branch }} +@endif +@endforeach +@endif +@if ( $on_pullrequest ) + pull_request: + branches: +@foreach ( $on_pullrequest_branches as $branch) +@if (Str::startsWith($branch, ['*', '[', '!'])) + - '{{ $branch }}' +@else + - {{ $branch }} +@endif +@endforeach +@endif +@endif diff --git a/resources/views/yaml/postgresql_service.blade.php b/resources/views/yaml/postgresql_service.blade.php new file mode 100644 index 0000000..a4914ba --- /dev/null +++ b/resources/views/yaml/postgresql_service.blade.php @@ -0,0 +1,26 @@ +@if ( $databaseType === "postgresql" ) + # Service container Postgresql {{ $postgresqlDatabase }} + services: + # Label used to access the service container + postgres: + # Docker Hub image (also with version) + image: postgres:{{ $postgresqlVersion }} + env: + POSTGRES_USER: postgres +@if ( $postgresqlPasswordType === 'secret' ) + POSTGRES_PASSWORD: $@{{ secrets.DB_PASSWORD }} +@endif +@if ( $postgresqlPasswordType === 'hardcoded' ) + POSTGRES_PASSWORD: {{ $postgresqlPassword }} +@endif + POSTGRES_DB: {{ $postgresqlDatabaseName }} + ## map the "external" 55432 port with the "internal" 5432 + ports: + - {{ $postgresqlDatabasePort }}:5432 + # Set health checks to wait until postgresql database has started (it takes some seconds to start) + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 +@endif diff --git a/resources/views/yaml/set_env.blade.php b/resources/views/yaml/set_env.blade.php new file mode 100644 index 0000000..5b660d9 --- /dev/null +++ b/resources/views/yaml/set_env.blade.php @@ -0,0 +1,43 @@ +# Set environment + env: +@if ( $databaseType === "mysql") +@if ( $mysqlDatabase != "") + DB_CONNECTION: {{ $mysqlDatabase }} +@endif +@if ( $mysqlDatabaseName != "") + DB_DATABASE: {{ $mysqlDatabaseName }} +@endif +@if ( $mysqlDatabasePort != "") + DB_PORT: {{ $mysqlDatabasePort }} +@endif + DB_USER: root +@if ( $mysqlPasswordType === 'skip' ) +@endif +@if ( $mysqlPasswordType === 'secret' ) + DB_PASSWORD: $@{{ secrets.DB_PASSWORD }} +@endif +@if ( $mysqlPasswordType === 'hardcoded' ) + DB_PASSWORD: {{ $mysqlPassword }} +@endif +@elseif ( $databaseType === "postgresql") + DB_CONNECTION: pgsql +@if ( $postgresqlDatabaseName != "") + DB_DATABASE: {{ $postgresqlDatabaseName }} +@endif +@if ( $postgresqlDatabasePort != "") + DB_PORT: {{ $postgresqlDatabasePort }} +@endif + DB_USERNAME: postgres +@if ( $postgresqlPasswordType === 'secret' ) + DB_PASSWORD: $@{{ secrets.DB_PASSWORD }} +@endif +@if ( $postgresqlPasswordType === 'hardcoded' ) + DB_PASSWORD: {{ $postgresqlPassword }} +@endif +@else + SESSION_DRIVER: array +@endif +@if ( $databaseType === "sqlite" ) + DB_CONNECTION: sqlite + DB_DATABASE: ":memory:" +@endif diff --git a/routes/web.php b/routes/web.php index 86a06c5..9cc73ca 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,34 @@ name('index'); +Route::get('/about', [ConfiguratorController::class, 'about'])->name('about'); + +Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); + +Route::post('/action', function () { + //$type = "application/x-yaml"; + $type = 'text/x-yaml'; + $data = [ + 'name' => 'Test Laravel Github action', + 'on_push' => true, + 'on_push_branches' => ['main', 'develop', 'feature/**'], + 'on_pullrequest' => true, + 'on_pullrequest_branches' => ['main'], + ]; + + return response() + ->view('action_yaml', $data, 200) + ->header('Content-Type', $type); }); + +Route::get('/configurations', function () { + return ConfigurationResource::collection(Configuration::all()); +}); + From 1d4098280e722dfd87221f1e1ae18f0a3ea7fe39 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sat, 16 Mar 2024 21:57:04 +0100 Subject: [PATCH 07/16] Welcome Livewire 3 --- app/{Http => }/Livewire/ConfiguratorForm.php | 10 +- app/{Http => }/Livewire/Dashboard/Daily.php | 2 +- app/{Http => }/Livewire/Dashboard/Latest.php | 2 +- app/{Http => }/Livewire/Dashboard/Metrics.php | 2 +- app/{Http => }/Livewire/Dashboard/Top.php | 2 +- .../0001_01_01_000002_create_jobs_table.php | 57 - .../2014_10_12_000000_create_users_table.php | 36 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ..._15_221117_create_configurations_table.php | 32 + ...221159_create_log_configurations_table.php | 28 + ...24_03_16_204845_create_sessions_table.php} | 18 - ... 2024_03_16_204920_create_cache_table.php} | 0 github-workflow.json | 1720 +++++++++++++++++ ...-github-actions-yaml-generator-laravel.png | Bin 0 -> 109581 bytes public/ghygen-square.png | Bin 0 -> 10018 bytes public/ghygen-title.png | Bin 0 -> 16234 bytes public/sitemap.xml | 11 + .../components/form/input-checkbox.blade.php | 2 +- .../form/input-conditional-checkbox.blade.php | 2 +- .../components/form/input-select.blade.php | 2 +- .../components/form/input-text.blade.php | 2 +- .../livewire/configurator-form.blade.php | 18 +- .../livewire/form/code-quality.blade.php | 4 +- .../livewire/form/laravel-stuff.blade.php | 4 +- 25 files changed, 1923 insertions(+), 99 deletions(-) rename app/{Http => }/Livewire/ConfiguratorForm.php (97%) rename app/{Http => }/Livewire/Dashboard/Daily.php (95%) rename app/{Http => }/Livewire/Dashboard/Latest.php (90%) rename app/{Http => }/Livewire/Dashboard/Metrics.php (96%) rename app/{Http => }/Livewire/Dashboard/Top.php (92%) delete mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 database/migrations/2024_03_15_221117_create_configurations_table.php create mode 100644 database/migrations/2024_03_15_221159_create_log_configurations_table.php rename database/migrations/{0001_01_01_000000_create_users_table.php => 2024_03_16_204845_create_sessions_table.php} (53%) rename database/migrations/{0001_01_01_000001_create_cache_table.php => 2024_03_16_204920_create_cache_table.php} (100%) create mode 100644 github-workflow.json create mode 100644 public/ghygen-github-actions-yaml-generator-laravel.png create mode 100644 public/ghygen-square.png create mode 100644 public/ghygen-title.png create mode 100644 public/sitemap.xml diff --git a/app/Http/Livewire/ConfiguratorForm.php b/app/Livewire/ConfiguratorForm.php similarity index 97% rename from app/Http/Livewire/ConfiguratorForm.php rename to app/Livewire/ConfiguratorForm.php index f2dd2ac..0e8e789 100644 --- a/app/Http/Livewire/ConfiguratorForm.php +++ b/app/Livewire/ConfiguratorForm.php @@ -1,6 +1,6 @@ loadDefaults(); if ($this->template != '') { - $this->template($this->template); + $this->setTemplate($this->template); } if ($this->code != '') { $confModel = Configuration::getByCode($this->code); @@ -114,7 +114,11 @@ public function updated(string $propertyName): void $this->result = ' '; } - public function template(string $x): void + public function templateLaravelApp() + { + $this->setTemplate("laravelapp"); + } + public function setTemplate($x) { if (in_array($x, ['laravelapp', 'laravelpostgresql', 'laravelpackage', 'phppackage'])) { $this->template = $x; diff --git a/app/Http/Livewire/Dashboard/Daily.php b/app/Livewire/Dashboard/Daily.php similarity index 95% rename from app/Http/Livewire/Dashboard/Daily.php rename to app/Livewire/Dashboard/Daily.php index 65cd49c..4843fb8 100644 --- a/app/Http/Livewire/Dashboard/Daily.php +++ b/app/Livewire/Dashboard/Daily.php @@ -1,6 +1,6 @@ id(); - $table->string('queue')->index(); - $table->longText('payload'); - $table->unsignedTinyInteger('attempts'); - $table->unsignedInteger('reserved_at')->nullable(); - $table->unsignedInteger('available_at'); - $table->unsignedInteger('created_at'); - }); - - Schema::create('job_batches', function (Blueprint $table) { - $table->string('id')->primary(); - $table->string('name'); - $table->integer('total_jobs'); - $table->integer('pending_jobs'); - $table->integer('failed_jobs'); - $table->longText('failed_job_ids'); - $table->mediumText('options')->nullable(); - $table->integer('cancelled_at')->nullable(); - $table->integer('created_at'); - $table->integer('finished_at')->nullable(); - }); - - Schema::create('failed_jobs', function (Blueprint $table) { - $table->id(); - $table->string('uuid')->unique(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jobs'); - Schema::dropIfExists('job_batches'); - Schema::dropIfExists('failed_jobs'); - } -}; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..621a24e --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..0ee0a36 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..6aa6d74 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/database/migrations/2024_03_15_221117_create_configurations_table.php b/database/migrations/2024_03_15_221117_create_configurations_table.php new file mode 100644 index 0000000..b18d8d3 --- /dev/null +++ b/database/migrations/2024_03_15_221117_create_configurations_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('code')->unique(); + $table->json('configuration'); + $table->json('metadata'); + $table->integer('counts')->default(1); + $table->timestamps(); + + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('configurations'); + } +}; diff --git a/database/migrations/2024_03_15_221159_create_log_configurations_table.php b/database/migrations/2024_03_15_221159_create_log_configurations_table.php new file mode 100644 index 0000000..2602d7f --- /dev/null +++ b/database/migrations/2024_03_15_221159_create_log_configurations_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('code')->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('log_configurations'); + } +}; diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/2024_03_16_204845_create_sessions_table.php similarity index 53% rename from database/migrations/0001_01_01_000000_create_users_table.php rename to database/migrations/2024_03_16_204845_create_sessions_table.php index 05fb5d9..f60625b 100644 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ b/database/migrations/2024_03_16_204845_create_sessions_table.php @@ -11,22 +11,6 @@ */ public function up(): void { - Schema::create('users', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); - $table->string('password'); - $table->rememberToken(); - $table->timestamps(); - }); - - Schema::create('password_reset_tokens', function (Blueprint $table) { - $table->string('email')->primary(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - Schema::create('sessions', function (Blueprint $table) { $table->string('id')->primary(); $table->foreignId('user_id')->nullable()->index(); @@ -42,8 +26,6 @@ public function up(): void */ public function down(): void { - Schema::dropIfExists('users'); - Schema::dropIfExists('password_reset_tokens'); Schema::dropIfExists('sessions'); } }; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/2024_03_16_204920_create_cache_table.php similarity index 100% rename from database/migrations/0001_01_01_000001_create_cache_table.php rename to database/migrations/2024_03_16_204920_create_cache_table.php diff --git a/github-workflow.json b/github-workflow.json new file mode 100644 index 0000000..b1e27aa --- /dev/null +++ b/github-workflow.json @@ -0,0 +1,1720 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://json.schemastore.org/github-workflow.json", + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions", + "additionalProperties": false, + "definitions": { + "architecture": { + "type": "string", + "enum": ["ARM32", "x64", "x86"] + }, + "branch": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestbranchestags", + "$ref": "#/definitions/globs", + "description": "When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref.\nThe branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet.\nThe patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref.\nYou can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches:\n- branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names.\n- tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names.\nYou can exclude tags and branches using the ! character. The order that you define patterns matters.\n- A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref.\n- A matching positive pattern after a negative match will include the Git ref again." + }, + "concurrency": { + "type": "object", + "properties": { + "group": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-using-concurrency-to-cancel-any-in-progress-job-or-run-1", + "description": "When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled.", + "type": "string" + }, + "cancel-in-progress": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-using-concurrency-to-cancel-any-in-progress-job-or-run-1", + "description": "To cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ] + } + }, + "required": ["group"], + "additionalProperties": false + }, + "configuration": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/configuration" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/configuration" + } + } + ] + }, + "container": { + "type": "object", + "properties": { + "image": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontainerimage", + "description": "The Docker image to use as the container to run the action. The value can be the Docker Hub image name or a registry name.", + "type": "string" + }, + "credentials": { + "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontainercredentials", + "description": "If the image's container registry requires authentication to pull the image, you can use credentials to set a map of the username and password. The credentials are the same values that you would provide to the `docker login` command.", + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "env": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontainerenv", + "$ref": "#/definitions/env", + "description": "Sets an array of environment variables in the container." + }, + "ports": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontainerports", + "description": "Sets an array of ports to expose on the container.", + "type": "array", + "items": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "minItems": 1 + }, + "volumes": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontainervolumes", + "description": "Sets an array of volumes for the container to use. You can use volumes to share data between services or other steps in a job. You can specify named Docker volumes, anonymous Docker volumes, or bind mounts on the host.\nTo specify a volume, you specify the source and destination path: :\nThe is a volume name or an absolute path on the host machine, and is an absolute path in the container.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[^:]+:[^:]+$" + }, + "minItems": 1 + }, + "options": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontaineroptions", + "description": "Additional Docker container resource options. For a list of options, see https://docs.docker.com/engine/reference/commandline/create/#options.", + "type": "string" + } + }, + "required": ["image"], + "additionalProperties": false + }, + "defaults": { + "type": "object", + "properties": { + "run": { + "type": "object", + "properties": { + "shell": { + "$ref": "#/definitions/shell" + }, + "working-directory": { + "$ref": "#/definitions/working-directory" + } + }, + "minProperties": 1, + "additionalProperties": false + } + }, + "minProperties": 1, + "additionalProperties": false + }, + "permissions": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#permissions", + "description": "You can modify the default permissions granted to the GITHUB_TOKEN, adding or removing access as required, so that you only allow the minimum required access.", + "oneOf": [ + { + "type": "string", + "enum": ["read-all", "write-all"] + }, + { + "$ref": "#/definitions/permissions-event" + } + ] + }, + "permissions-event": { + "type": "object", + "additionalProperties": false, + "properties": { + "actions": { + "$ref": "#/definitions/permissions-level" + }, + "checks": { + "$ref": "#/definitions/permissions-level" + }, + "contents": { + "$ref": "#/definitions/permissions-level" + }, + "deployments": { + "$ref": "#/definitions/permissions-level" + }, + "discussions": { + "$ref": "#/definitions/permissions-level" + }, + "id-token": { + "$ref": "#/definitions/permissions-level" + }, + "issues": { + "$ref": "#/definitions/permissions-level" + }, + "packages": { + "$ref": "#/definitions/permissions-level" + }, + "pages": { + "$ref": "#/definitions/permissions-level" + }, + "pull-requests": { + "$ref": "#/definitions/permissions-level" + }, + "repository-projects": { + "$ref": "#/definitions/permissions-level" + }, + "security-events": { + "$ref": "#/definitions/permissions-level" + }, + "statuses": { + "$ref": "#/definitions/permissions-level" + } + } + }, + "permissions-level": { + "type": "string", + "enum": ["read", "write", "none"] + }, + "env": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/environment-variables", + "description": "To set custom environment variables, you need to specify the variables in the workflow file. You can define environment variables for a step, job, or entire workflow using the jobs..steps[*].env, jobs..env, and env keywords. For more information, see https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsenv", + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + { + "$ref": "#/definitions/stringContainingExpressionSyntax" + } + ] + }, + "environment": { + "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment", + "description": "The environment that the job references", + "type": "object", + "properties": { + "name": { + "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#example-using-a-single-environment-name", + "description": "The name of the environment configured in the repo.", + "type": "string" + }, + "url": { + "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#example-using-environment-name-and-url", + "description": "A deployment URL", + "type": "string" + } + }, + "required": ["name"], + "additionalProperties": false + }, + "event": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows", + "type": "string", + "enum": [ + "branch_protection_rule", + "check_run", + "check_suite", + "create", + "delete", + "deployment", + "deployment_status", + "discussion", + "discussion_comment", + "fork", + "gollum", + "issue_comment", + "issues", + "label", + "merge_group", + "milestone", + "page_build", + "project", + "project_card", + "project_column", + "public", + "pull_request", + "pull_request_review", + "pull_request_review_comment", + "pull_request_target", + "push", + "registry_package", + "release", + "status", + "watch", + "workflow_call", + "workflow_dispatch", + "workflow_run", + "repository_dispatch" + ] + }, + "eventObject": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "additionalProperties": true + }, + "expressionSyntax": { + "$comment": "escape `{` and `}` in pattern to be unicode compatible (#1360)", + "type": "string", + "pattern": "^\\$\\{\\{(.|[\r\n])*\\}\\}$" + }, + "stringContainingExpressionSyntax": { + "$comment": "escape `{` and `}` in pattern to be unicode compatible (#1360)", + "type": "string", + "pattern": "^.*\\$\\{\\{(.|[\r\n])*\\}\\}.*$" + }, + "globs": { + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "minItems": 1 + }, + "machine": { + "type": "string", + "enum": ["linux", "macos", "windows"] + }, + "name": { + "type": "string", + "pattern": "^[_a-zA-Z][a-zA-Z0-9_-]*$" + }, + "path": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestpaths", + "$ref": "#/definitions/globs", + "description": "When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags.\nThe paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet.\nYou can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow.\n- paths-ignore - Use the paths-ignore filter when you only need to exclude path names.\n- paths - Use the paths filter when you need to filter paths for positive matches and exclude paths." + }, + "ref": { + "properties": { + "branches": { + "$ref": "#/definitions/branch" + }, + "branches-ignore": { + "$ref": "#/definitions/branch" + }, + "tags": { + "$ref": "#/definitions/branch" + }, + "tags-ignore": { + "$ref": "#/definitions/branch" + }, + "paths": { + "$ref": "#/definitions/path" + }, + "paths-ignore": { + "$ref": "#/definitions/path" + } + }, + "oneOf": [ + { + "type": "object", + "allOf": [ + { + "not": { + "required": ["branches", "branches-ignore"] + } + }, + { + "not": { + "required": ["tags", "tags-ignore"] + } + }, + { + "not": { + "required": ["paths", "paths-ignore"] + } + } + ] + }, + { + "type": "null" + } + ] + }, + "shell": { + "$comment": "https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell", + "description": "You can override the default shell settings in the runner's operating system using the shell keyword. You can use built-in shell keywords, or you can define a custom set of shell options.", + "anyOf": [ + { + "type": "string" + }, + { + "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#custom-shell", + "type": "string", + "enum": ["bash", "pwsh", "python", "sh", "cmd", "powershell"] + } + ] + }, + "types": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onevent_nametypes", + "description": "Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary.\nYou can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events.", + "type": "array", + "minItems": 1 + }, + "working-directory": { + "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun", + "description": "Using the working-directory keyword, you can specify the working directory of where to run the command.", + "type": "string" + }, + "jobNeeds": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idneeds", + "description": "Identifies any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails, all jobs that need it are skipped unless the jobs use a conditional statement that causes the job to continue.", + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/name" + }, + "minItems": 1 + }, + { + "$ref": "#/definitions/name" + } + ] + }, + "matrix": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix", + "description": "A build matrix is a set of different configurations of the virtual environment. For example you might run a job against more than one supported version of a language, operating system, or tool. Each configuration is a copy of the job that runs and reports a status.\nYou can specify a matrix by supplying an array for the configuration options. For example, if the GitHub virtual environment supports Node.js versions 6, 8, and 10 you could specify an array of those versions in the matrix.\nWhen you define a matrix of operating systems, you must set the required runs-on keyword to the operating system of the current job, rather than hard-coding the operating system name. To access the operating system name, you can use the matrix.os context parameter to set runs-on. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", + "oneOf": [ + { + "type": "object" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ], + "patternProperties": { + "^(in|ex)clude$": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#example-including-configurations-in-a-matrix-build", + "oneOf": [ + { + "$ref": "#/definitions/expressionSyntax" + }, + { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/configuration" + } + }, + "minItems": 1 + } + ] + } + }, + "additionalProperties": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/configuration" + }, + "minItems": 1 + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ] + }, + "minProperties": 1 + }, + "reusableWorkflowCallJob": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/reusing-workflows#calling-a-reusable-workflow", + "description": "Each job must have an id to associate with the job. The key job_id is a string and its value is a map of the job's configuration data. You must replace with a string that is unique to the jobs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _.", + "type": "object", + "properties": { + "name": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idname", + "description": "The name of the job displayed on GitHub.", + "type": "string" + }, + "needs": { + "$ref": "#/definitions/jobNeeds" + }, + "permissions": { + "$ref": "#/definitions/permissions" + }, + "if": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idif", + "description": "You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional.\nExpressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", + "type": ["boolean", "number", "string"] + }, + "uses": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_iduses", + "description": "The location and version of a reusable workflow file to run as a job, of the form './{path/to}/{localfile}.yml' or '{owner}/{repo}/{path}/{filename}@{ref}'. {ref} can be a SHA, a release tag, or a branch name. Using the commit SHA is the safest for stability and security.", + "type": "string", + "pattern": "^(.+/)+(.+)\\.(ya?ml)(@.+)?$" + }, + "with": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idwith", + "$ref": "#/definitions/env", + "description": "A map of inputs that are passed to the called workflow. Any inputs that you pass must match the input specifications defined in the called workflow. Unlike 'jobs..steps[*].with', the inputs you pass with 'jobs..with' are not be available as environment variables in the called workflow. Instead, you can reference the inputs by using the inputs context." + }, + "secrets": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idsecrets", + "description": "When a job is used to call a reusable workflow, you can use 'secrets' to provide a map of secrets that are passed to the called workflow. Any secrets that you pass must match the names defined in the called workflow.", + "oneOf": [ + { + "$ref": "#/definitions/env" + }, + { + "type": "string", + "enum": ["inherit"] + } + ] + }, + "strategy": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategy", + "description": "A strategy creates a build matrix for your jobs. You can define different variations of an environment to run each job in.", + "type": "object", + "properties": { + "matrix": { + "$ref": "#/definitions/matrix" + }, + "fail-fast": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast", + "description": "When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true", + "type": ["boolean", "string"], + "default": true + }, + "max-parallel": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategymax-parallel", + "description": "The maximum number of jobs that can run simultaneously when using a matrix job strategy. By default, GitHub will maximize the number of jobs run in parallel depending on the available runners on GitHub-hosted virtual machines.", + "type": ["number", "string"] + } + }, + "required": ["matrix"], + "additionalProperties": false + }, + "concurrency": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idconcurrency", + "description": "Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. \nYou can also specify concurrency at the workflow level. \nWhen a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/concurrency" + } + ] + } + }, + "required": ["uses"], + "additionalProperties": false + }, + "normalJob": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_id", + "description": "Each job must have an id to associate with the job. The key job_id is a string and its value is a map of the job's configuration data. You must replace with a string that is unique to the jobs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _.", + "type": "object", + "properties": { + "name": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idname", + "description": "The name of the job displayed on GitHub.", + "type": "string" + }, + "needs": { + "$ref": "#/definitions/jobNeeds" + }, + "permissions": { + "$ref": "#/definitions/permissions" + }, + "runs-on": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idruns-on", + "description": "The type of machine to run the job on. The machine can be either a GitHub-hosted runner, or a self-hosted runner.", + "anyOf": [ + { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#github-hosted-runners", + "type": "string" + }, + { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#self-hosted-runners", + "type": "array", + "anyOf": [ + { + "items": [ + { + "type": "string" + } + ], + "minItems": 1 + } + ] + }, + { + "$comment": "https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-runners-in-a-group", + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "labels": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + } + }, + { + "$ref": "#/definitions/stringContainingExpressionSyntax" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ] + }, + "environment": { + "$comment": "https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment", + "description": "The environment that the job references.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/environment" + } + ] + }, + "outputs": { + "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjobs_idoutputs", + "description": "A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "minProperties": 1 + }, + "env": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idenv", + "$ref": "#/definitions/env", + "description": "A map of environment variables that are available to all steps in the job." + }, + "defaults": { + "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_iddefaults", + "$ref": "#/definitions/defaults", + "description": "A map of default settings that will apply to all steps in the job." + }, + "if": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idif", + "description": "You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional.\nExpressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", + "type": ["boolean", "number", "string"] + }, + "steps": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idsteps", + "description": "A job contains a sequence of tasks called steps. Steps can run commands, run setup tasks, or run an action in your repository, a public repository, or an action published in a Docker registry. Not all steps run actions, but all actions run as a step. Each step runs in its own process in the virtual environment and has access to the workspace and filesystem. Because steps run in their own process, changes to environment variables are not preserved between steps. GitHub provides built-in steps to set up and complete a job.\nMust contain either `uses` or `run`\n", + "type": "array", + "items": { + "allOf": [ + { + "oneOf": [ + { + "type": "object", + "properties": { + "uses": { + "type": "string" + } + }, + "required": ["uses"] + }, + { + "type": "object", + "properties": { + "run": { + "type": "string" + } + }, + "required": ["run"] + } + ] + }, + { + "type": "object", + "properties": { + "id": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsid", + "description": "A unique identifier for the step. You can use the id to reference the step in contexts. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", + "type": "string" + }, + "if": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsif", + "description": "You can use the if conditional to prevent a step from running unless a condition is met. You can use any supported context and expression to create a conditional.\nExpressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.", + "type": ["boolean", "number", "string"] + }, + "name": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsname", + "description": "A name for your step to display on GitHub.", + "type": "string" + }, + "uses": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsuses", + "description": "Selects an action to run as part of a step in your job. An action is a reusable unit of code. You can use an action defined in the same repository as the workflow, a public repository, or in a published Docker container image (https://hub.docker.com/).\nWe strongly recommend that you include the version of the action you are using by specifying a Git ref, SHA, or Docker tag number. If you don't specify a version, it could break your workflows or cause unexpected behavior when the action owner publishes an update.\n- Using the commit SHA of a released action version is the safest for stability and security.\n- Using the specific major action version allows you to receive critical fixes and security patches while still maintaining compatibility. It also assures that your workflow should still work.\n- Using the master branch of an action may be convenient, but if someone releases a new major version with a breaking change, your workflow could break.\nSome actions require inputs that you must set using the with keyword. Review the action's README file to determine the inputs required.\nActions are either JavaScript files or Docker containers. If the action you're using is a Docker container you must run the job in a Linux virtual environment. For more details, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", + "type": "string" + }, + "run": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsrun", + "description": "Runs command-line programs using the operating system's shell. If you do not provide a name, the step name will default to the text specified in the run command.\nCommands run using non-login shells by default. You can choose a different shell and customize the shell used to run commands. For more information, see https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#using-a-specific-shell.\nEach run keyword represents a new process and shell in the virtual environment. When you provide multi-line commands, each line runs in the same shell.", + "type": "string" + }, + "working-directory": { + "$ref": "#/definitions/working-directory" + }, + "shell": { + "$ref": "#/definitions/shell" + }, + "with": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepswith", + "$ref": "#/definitions/env", + "description": "A map of the input parameters defined by the action. Each input parameter is a key/value pair. Input parameters are set as environment variables. The variable is prefixed with INPUT_ and converted to upper case.", + "properties": { + "args": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepswithargs", + "type": "string" + }, + "entrypoint": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepswithentrypoint", + "type": "string" + } + } + }, + "env": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsenv", + "$ref": "#/definitions/env", + "description": "Sets environment variables for steps to use in the virtual environment. You can also set environment variables for the entire workflow or a job." + }, + "continue-on-error": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error", + "description": "Prevents a job from failing when a step fails. Set to true to allow a job to pass when this step fails.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ], + "default": false + }, + "timeout-minutes": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepstimeout-minutes", + "description": "The maximum number of minutes to run the step before killing the process.", + "oneOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ] + } + }, + "dependencies": { + "working-directory": ["run"], + "shell": ["run"] + }, + "additionalProperties": false + } + ] + }, + "minItems": 1 + }, + "timeout-minutes": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes", + "description": "The maximum number of minutes to let a workflow run before GitHub automatically cancels it. Default: 360", + "oneOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ], + "default": 360 + }, + "strategy": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategy", + "description": "A strategy creates a build matrix for your jobs. You can define different variations of an environment to run each job in.", + "type": "object", + "properties": { + "matrix": { + "$ref": "#/definitions/matrix" + }, + "fail-fast": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast", + "description": "When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true", + "type": ["boolean", "string"], + "default": true + }, + "max-parallel": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategymax-parallel", + "description": "The maximum number of jobs that can run simultaneously when using a matrix job strategy. By default, GitHub will maximize the number of jobs run in parallel depending on the available runners on GitHub-hosted virtual machines.", + "type": ["number", "string"] + } + }, + "required": ["matrix"], + "additionalProperties": false + }, + "continue-on-error": { + "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error", + "description": "Prevents a workflow run from failing when a job fails. Set to true to allow a workflow run to pass when this job fails.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/expressionSyntax" + } + ] + }, + "container": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idcontainer", + "description": "A container to run any steps in a job that don't already specify a container. If you have steps that use both script and container actions, the container actions will run as sibling containers on the same network with the same volume mounts.\nIf you do not set a container, all steps will run directly on the host specified by runs-on unless a step refers to an action configured to run in a container.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/container" + } + ] + }, + "services": { + "$comment": "https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idservices", + "description": "Additional containers to host services for a job in a workflow. These are useful for creating databases or cache services like redis. The runner on the virtual machine will automatically create a network and manage the life cycle of the service containers.\nWhen you use a service container for a job or your step uses container actions, you don't need to set port information to access the service. Docker automatically exposes all ports between containers on the same network.\nWhen both the job and the action run in a container, you can directly reference the container by its hostname. The hostname is automatically mapped to the service name.\nWhen a step does not use a container action, you must access the service using localhost and bind the ports.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/container" + } + }, + "concurrency": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idconcurrency", + "description": "Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. \nYou can also specify concurrency at the workflow level. \nWhen a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/concurrency" + } + ] + } + }, + "required": ["runs-on"], + "additionalProperties": false + } + }, + "properties": { + "name": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#name", + "description": "The name of your workflow. GitHub displays the names of your workflows on your repository's actions page. If you omit this field, GitHub sets the name to the workflow's filename.", + "type": "string" + }, + "on": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#on", + "description": "The name of the GitHub event that triggers the workflow. You can provide a single event string, array of events, array of event types, or an event configuration map that schedules a workflow or restricts the execution of a workflow to specific files, tags, or branch changes. For a list of available events, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows.", + "oneOf": [ + { + "$ref": "#/definitions/event" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/event" + }, + "minItems": 1 + }, + { + "type": "object", + "properties": { + "branch_protection_rule": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#branch_protection_rule", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the branch_protection_rule event occurs. More than one activity type triggers this event.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "edited", "deleted"] + }, + "default": ["created", "edited", "deleted"] + } + } + }, + "check_run": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#check-run-event-check_run", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the check_run event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/runs.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "created", + "rerequested", + "completed", + "requested_action" + ] + }, + "default": [ + "created", + "rerequested", + "completed", + "requested_action" + ] + } + } + }, + "check_suite": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#check-suite-event-check_suite", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the check_suite event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/suites/.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["completed", "requested", "rerequested"] + }, + "default": ["completed", "requested", "rerequested"] + } + } + }, + "create": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#create-event-create", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime someone creates a branch or tag, which triggers the create event. For information about the REST API, see https://developer.github.com/v3/git/refs/#create-a-reference." + }, + "delete": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#delete-event-delete", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime someone deletes a branch or tag, which triggers the delete event. For information about the REST API, see https://developer.github.com/v3/git/refs/#delete-a-reference." + }, + "deployment": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#deployment-event-deployment", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime someone creates a deployment, which triggers the deployment event. Deployments created with a commit SHA may not have a Git ref. For information about the REST API, see https://developer.github.com/v3/repos/deployments/." + }, + "deployment_status": { + "$comment": "https://docs.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime a third party provides a deployment status, which triggers the deployment_status event. Deployments created with a commit SHA may not have a Git ref. For information about the REST API, see https://developer.github.com/v3/repos/deployments/#create-a-deployment-status." + }, + "discussion": { + "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#discussion", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the discussion event occurs. More than one activity type triggers this event. For information about the GraphQL API, see https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "created", + "edited", + "deleted", + "transferred", + "pinned", + "unpinned", + "labeled", + "unlabeled", + "locked", + "unlocked", + "category_changed", + "answered", + "unanswered" + ] + }, + "default": [ + "created", + "edited", + "deleted", + "transferred", + "pinned", + "unpinned", + "labeled", + "unlabeled", + "locked", + "unlocked", + "category_changed", + "answered", + "unanswered" + ] + } + } + }, + "discussion_comment": { + "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#discussion_comment", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the discussion_comment event occurs. More than one activity type triggers this event. For information about the GraphQL API, see https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "edited", "deleted"] + }, + "default": ["created", "edited", "deleted"] + } + } + }, + "fork": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#fork-event-fork", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime when someone forks a repository, which triggers the fork event. For information about the REST API, see https://developer.github.com/v3/repos/forks/#create-a-fork." + }, + "gollum": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#gollum-event-gollum", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow when someone creates or updates a Wiki page, which triggers the gollum event." + }, + "issue_comment": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#issue-comment-event-issue_comment", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the issue_comment event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/comments/.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "edited", "deleted"] + }, + "default": ["created", "edited", "deleted"] + } + } + }, + "issues": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#issues-event-issues", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the issues event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "opened", + "edited", + "deleted", + "transferred", + "pinned", + "unpinned", + "closed", + "reopened", + "assigned", + "unassigned", + "labeled", + "unlabeled", + "locked", + "unlocked", + "milestoned", + "demilestoned" + ] + }, + "default": [ + "opened", + "edited", + "deleted", + "transferred", + "pinned", + "unpinned", + "closed", + "reopened", + "assigned", + "unassigned", + "labeled", + "unlabeled", + "locked", + "unlocked", + "milestoned", + "demilestoned" + ] + } + } + }, + "label": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#label-event-label", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the label event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/labels/.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "edited", "deleted"] + }, + "default": ["created", "edited", "deleted"] + } + } + }, + "merge_group": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#merge_group", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow when a pull request is added to a merge queue, which adds the pull request to a merge group. For information about the merge queue, see https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request-with-a-merge-queue .", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["checks_requested"] + }, + "default": ["checks_requested"] + } + } + }, + "milestone": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#milestone-event-milestone", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the milestone event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/milestones/.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "closed", "opened", "edited", "deleted"] + }, + "default": [ + "created", + "closed", + "opened", + "edited", + "deleted" + ] + } + } + }, + "page_build": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#page-build-event-page_build", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime someone pushes to a GitHub Pages-enabled branch, which triggers the page_build event. For information about the REST API, see https://developer.github.com/v3/repos/pages/." + }, + "project": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#project-event-project", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the project event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "created", + "updated", + "closed", + "reopened", + "edited", + "deleted" + ] + }, + "default": [ + "created", + "updated", + "closed", + "reopened", + "edited", + "deleted" + ] + } + } + }, + "project_card": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#project-card-event-project_card", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the project_card event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/cards.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "created", + "moved", + "converted", + "edited", + "deleted" + ] + }, + "default": [ + "created", + "moved", + "converted", + "edited", + "deleted" + ] + } + } + }, + "project_column": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#project-column-event-project_column", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the project_column event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/columns.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "updated", "moved", "deleted"] + }, + "default": ["created", "updated", "moved", "deleted"] + } + } + }, + "public": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#public-event-public", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime someone makes a private repository public, which triggers the public event. For information about the REST API, see https://developer.github.com/v3/repos/#edit." + }, + "pull_request": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#pull-request-event-pull_request", + "$ref": "#/definitions/ref", + "description": "Runs your workflow anytime the pull_request event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls.\nNote: Workflows do not run on private base repositories when you open a pull request from a forked repository.\nWhen you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository.\nWorkflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository.\nThe permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "assigned", + "unassigned", + "labeled", + "unlabeled", + "opened", + "edited", + "closed", + "reopened", + "synchronize", + "converted_to_draft", + "ready_for_review", + "locked", + "unlocked", + "milestoned", + "demilestoned", + "review_requested", + "review_request_removed", + "auto_merge_enabled", + "auto_merge_disabled" + ] + }, + "default": ["opened", "synchronize", "reopened"] + } + }, + "patternProperties": { + "^(branche|tag|path)s(-ignore)?$": { + "type": "array" + } + }, + "additionalProperties": false + }, + "pull_request_review": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#pull-request-review-event-pull_request_review", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the pull_request_review event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/reviews.\nNote: Workflows do not run on private base repositories when you open a pull request from a forked repository.\nWhen you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository.\nWorkflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository.\nThe permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["submitted", "edited", "dismissed"] + }, + "default": ["submitted", "edited", "dismissed"] + } + } + }, + "pull_request_review_comment": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#pull-request-review-comment-event-pull_request_review_comment", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime a comment on a pull request's unified diff is modified, which triggers the pull_request_review_comment event. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/comments.\nNote: Workflows do not run on private base repositories when you open a pull request from a forked repository.\nWhen you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository.\nWorkflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository.\nThe permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["created", "edited", "deleted"] + }, + "default": ["created", "edited", "deleted"] + } + } + }, + "pull_request_target": { + "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request_target", + "$ref": "#/definitions/ref", + "description": "This event is similar to pull_request, except that it runs in the context of the base repository of the pull request, rather than in the merge commit. This means that you can more safely make your secrets available to the workflows triggered by the pull request, because only workflows defined in the commit on the base repository are run. For example, this event allows you to create workflows that label and comment on pull requests, based on the contents of the event payload.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "assigned", + "unassigned", + "labeled", + "unlabeled", + "opened", + "edited", + "closed", + "reopened", + "synchronize", + "converted_to_draft", + "ready_for_review", + "locked", + "unlocked", + "review_requested", + "review_request_removed", + "auto_merge_enabled", + "auto_merge_disabled" + ] + }, + "default": ["opened", "synchronize", "reopened"] + } + }, + "patternProperties": { + "^(branche|tag|path)s(-ignore)?$": {} + }, + "additionalProperties": false + }, + "push": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#push-event-push", + "$ref": "#/definitions/ref", + "description": "Runs your workflow when someone pushes to a repository branch, which triggers the push event.\nNote: The webhook payload available to GitHub Actions does not include the added, removed, and modified attributes in the commit object. You can retrieve the full commit object using the REST API. For more information, see https://developer.github.com/v3/repos/commits/#get-a-single-commit.", + "patternProperties": { + "^(branche|tag|path)s(-ignore)?$": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "additionalProperties": false + }, + "registry_package": { + "$comment": "https://help.github.com/en/actions/reference/events-that-trigger-workflows#registry-package-event-registry_package", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime a package is published or updated. For more information, see https://help.github.com/en/github/managing-packages-with-github-packages.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["published", "updated"] + }, + "default": ["published", "updated"] + } + } + }, + "release": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#release-event-release", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the release event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/releases/ in the GitHub Developer documentation.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": [ + "published", + "unpublished", + "created", + "edited", + "deleted", + "prereleased", + "released" + ] + }, + "default": [ + "published", + "unpublished", + "created", + "edited", + "deleted", + "prereleased", + "released" + ] + } + } + }, + "status": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#status-event-status", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the status of a Git commit changes, which triggers the status event. For information about the REST API, see https://developer.github.com/v3/repos/statuses/." + }, + "watch": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#watch-event-watch", + "$ref": "#/definitions/eventObject", + "description": "Runs your workflow anytime the watch event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/activity/starring/." + }, + "workflow_call": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#workflow_call", + "description": "Allows workflows to be reused by other workflows.", + "properties": { + "inputs": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onworkflow_callinputs", + "description": "When using the workflow_call keyword, you can optionally specify inputs that are passed to the called workflow from the caller workflow.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z][a-zA-Z0-9_-]*$": { + "$comment": "https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#inputsinput_id", + "description": "A string identifier to associate with the input. The value of is a map of the input's metadata. The must be a unique identifier within the inputs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _.", + "type": "object", + "properties": { + "description": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_iddescription", + "description": "A string description of the input parameter.", + "type": "string" + }, + "deprecationMessage": { + "description": "A string shown to users using the deprecated input.", + "type": "string" + }, + "required": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_idrequired", + "description": "A boolean to indicate whether the action requires the input parameter. Set to true when the parameter is required.", + "type": "boolean" + }, + "type": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_callinput_idtype", + "description": "Required if input is defined for the on.workflow_call keyword. The value of this parameter is a string specifying the data type of the input. This must be one of: boolean, number, or string.", + "type": "string", + "enum": ["boolean", "number", "string"] + }, + "default": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_iddefault", + "description": "The default value is used when an input parameter isn't specified in a workflow file.", + "type": ["boolean", "number", "string"] + } + }, + "required": ["type"], + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "secrets": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_callsecrets", + "description": "A map of the secrets that can be used in the called workflow. Within the called workflow, you can use the secrets context to refer to a secret.", + "patternProperties": { + "^[_a-zA-Z][a-zA-Z0-9_-]*$": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_callsecretssecret_id", + "description": "A string identifier to associate with the secret.", + "properties": { + "description": { + "description": "A string description of the secret parameter.", + "type": "string" + }, + "required": { + "$comment": "https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_callsecretssecret_idrequired", + "description": "A boolean specifying whether the secret must be supplied.", + "type": "boolean" + } + }, + "required": ["required"], + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "workflow_dispatch": { + "$comment": "https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/", + "description": "You can now create workflows that are manually triggered with the new workflow_dispatch event. You will then see a 'Run workflow' button on the Actions tab, enabling you to easily trigger a run.", + "properties": { + "inputs": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputs", + "description": "Input parameters allow you to specify data that the action expects to use during runtime. GitHub stores input parameters as environment variables. Input ids with uppercase letters are converted to lowercase during runtime. We recommended using lowercase input ids.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z][a-zA-Z0-9_-]*$": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_id", + "description": "A string identifier to associate with the input. The value of is a map of the input's metadata. The must be a unique identifier within the inputs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _.", + "type": "object", + "properties": { + "description": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_iddescription", + "description": "A string description of the input parameter.", + "type": "string" + }, + "deprecationMessage": { + "description": "A string shown to users using the deprecated input.", + "type": "string" + }, + "required": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_idrequired", + "description": "A boolean to indicate whether the action requires the input parameter. Set to true when the parameter is required.", + "type": "boolean" + }, + "default": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputsinput_iddefault", + "description": "A string representing the default value. The default value is used when an input parameter isn't specified in a workflow file." + }, + "type": { + "$comment": "https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_dispatchinputsinput_idtype", + "description": "A string representing the type of the input.", + "type": "string", + "enum": [ + "string", + "choice", + "boolean", + "number", + "environment" + ] + }, + "options": { + "$comment": "https://github.blog/changelog/2021-11-10-github-actions-input-types-for-manual-workflows", + "description": "The options of the dropdown list, if the type is a choice.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "string" + } + }, + "required": ["type"] + }, + "then": { + "properties": { + "default": { + "type": "string" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "boolean" + } + }, + "required": ["type"] + }, + "then": { + "properties": { + "default": { + "type": "boolean" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "number" + } + }, + "required": ["type"] + }, + "then": { + "properties": { + "default": { + "type": "number" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "environment" + } + }, + "required": ["type"] + }, + "then": { + "properties": { + "default": { + "type": "string" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "choice" + } + }, + "required": ["type"] + }, + "then": { + "required": ["options"] + } + } + ], + "required": ["description"], + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "workflow_run": { + "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_run", + "$ref": "#/definitions/eventObject", + "description": "This event occurs when a workflow run is requested or completed, and allows you to execute a workflow based on the finished result of another workflow. For example, if your pull_request workflow generates build artifacts, you can create a new workflow that uses workflow_run to analyze the results and add a comment to the original pull request.", + "properties": { + "types": { + "$ref": "#/definitions/types", + "items": { + "type": "string", + "enum": ["requested", "completed", "in_progress"] + }, + "default": ["requested", "completed"] + }, + "workflows": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "patternProperties": { + "^branches(-ignore)?$": {} + } + }, + "repository_dispatch": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#external-events-repository_dispatch", + "$ref": "#/definitions/eventObject", + "description": "You can use the GitHub API to trigger a webhook event called repository_dispatch when you want to trigger a workflow for activity that happens outside of GitHub. For more information, see https://developer.github.com/v3/repos/#create-a-repository-dispatch-event.\nTo trigger the custom repository_dispatch webhook event, you must send a POST request to a GitHub API endpoint and provide an event_type name to describe the activity type. To trigger a workflow run, you must also configure your workflow to use the repository_dispatch event." + }, + "schedule": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows#scheduled-events-schedule", + "description": "You can schedule a workflow to run at specific UTC times using POSIX cron syntax (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07). Scheduled workflows run on the latest commit on the default or base branch. The shortest interval you can run scheduled workflows is once every 5 minutes.\nNote: GitHub Actions does not support the non-standard syntax @yearly, @monthly, @weekly, @daily, @hourly, and @reboot.\nYou can use crontab guru (https://crontab.guru/). to help generate your cron syntax and confirm what time it will run. To help you get started, there is also a list of crontab guru examples (https://crontab.guru/examples.html).", + "type": "array", + "items": { + "properties": { + "cron": { + "$comment": "https://stackoverflow.com/a/57639657/4044345", + "type": "string", + "pattern": "^(((\\d+,)+\\d+|((\\d+|\\*)/\\d+|((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?))|(\\d+-\\d+)|\\d+(-\\d+)?/\\d+(-\\d+)?|\\d+|\\*|(MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?) ?){5}$" + } + }, + "additionalProperties": false + }, + "minItems": 1 + } + }, + "additionalProperties": false + } + ] + }, + "env": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#env", + "$ref": "#/definitions/env", + "description": "A map of environment variables that are available to all jobs and steps in the workflow." + }, + "defaults": { + "$comment": "https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#defaults", + "$ref": "#/definitions/defaults", + "description": "A map of default settings that will apply to all jobs in the workflow." + }, + "concurrency": { + "$comment": "https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency", + "description": "Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. \nYou can also specify concurrency at the workflow level. \nWhen a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/concurrency" + } + ] + }, + "jobs": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobs", + "description": "A workflow run is made up of one or more jobs. Jobs run in parallel by default. To run jobs sequentially, you can define dependencies on other jobs using the jobs..needs keyword.\nEach job runs in a fresh instance of the virtual environment specified by runs-on.\nYou can run an unlimited number of jobs as long as you are within the workflow usage limits. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z][a-zA-Z0-9_-]*$": { + "oneOf": [ + { + "$ref": "#/definitions/normalJob" + }, + { + "$ref": "#/definitions/reusableWorkflowCallJob" + } + ] + } + }, + "minProperties": 1, + "additionalProperties": false + }, + "run-name": { + "$comment": "https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#run-name", + "description": "The name for workflow runs generated from the workflow. GitHub displays the workflow run name in the list of workflow runs on your repository's 'Actions' tab.", + "type": "string" + }, + "permissions": { + "$ref": "#/definitions/permissions" + } + }, + "required": ["on", "jobs"], + "type": "object" +} diff --git a/public/ghygen-github-actions-yaml-generator-laravel.png b/public/ghygen-github-actions-yaml-generator-laravel.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f4c135244708313a5714b44297ede26a3f7cb3 GIT binary patch literal 109581 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

M1uGA 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 X5sQ5L)8mhSZ$YUlYARGevkd(&rSqZ# literal 0 HcmV?d00001 diff --git a/public/ghygen-title.png b/public/ghygen-title.png new file mode 100644 index 0000000000000000000000000000000000000000..5f288f6a2fbb8dd7a500300a965bbd6017b2af79 GIT binary patch literal 16234 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 k + + + https://ghygen.hi-folks.dev/ + 2021-03-07T16:34:50+00:00 + + + https://ghygen.hi-folks.dev/about + 2021-03-07T16:34:50+00:00 + + diff --git a/resources/views/components/form/input-checkbox.blade.php b/resources/views/components/form/input-checkbox.blade.php index 8084bac..bd0c0dc 100644 --- a/resources/views/components/form/input-checkbox.blade.php +++ b/resources/views/components/form/input-checkbox.blade.php @@ -11,7 +11,7 @@

diff --git a/resources/views/components/form/input-conditional-checkbox.blade.php b/resources/views/components/form/input-conditional-checkbox.blade.php index e3838d7..8a1ecf0 100644 --- a/resources/views/components/form/input-conditional-checkbox.blade.php +++ b/resources/views/components/form/input-conditional-checkbox.blade.php @@ -7,7 +7,7 @@ 'model' => '', ]) -
+
- @foreach( $list as $key=> $item) @endforeach diff --git a/resources/views/components/form/input-text.blade.php b/resources/views/components/form/input-text.blade.php index dfff2d2..99cf4e3 100644 --- a/resources/views/components/form/input-text.blade.php +++ b/resources/views/components/form/input-text.blade.php @@ -12,7 +12,7 @@ - @if ($help !== "")

diff --git a/resources/views/livewire/configurator-form.blade.php b/resources/views/livewire/configurator-form.blade.php index 643b02e..999db00 100644 --- a/resources/views/livewire/configurator-form.blade.php +++ b/resources/views/livewire/configurator-form.blade.php @@ -9,10 +9,10 @@ description="Setup Workflow for Laravel with database and Code Quality." icon="laravel" > - + Mysql - + Postgresql @@ -22,7 +22,7 @@ description="Setup Workflow for PHP Package." icon="php" > - + PHP @@ -32,7 +32,7 @@ icon="laravel" > - + Laravel Package @@ -42,7 +42,7 @@

OR compile some details...
-
+ @csrf
@@ -66,7 +66,7 @@ label="On Push" id="onPush" value=1 - wire:model="onPush" + wire:model.live="onPush" > Date: Sat, 16 Mar 2024 23:26:58 +0100 Subject: [PATCH 08/16] Makefiles --- Makefile | 36 +++++++++++++++ Makefile.deploy | 64 ++++++++++++++++++++++++++ Makefile.param.dist | 7 +++ composer.json | 3 +- exclude-list.txt | 107 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 Makefile.deploy create mode 100644 Makefile.param.dist create mode 100644 exclude-list.txt diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5271f7c --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +.PHONY : help phpstan test coverage phpcs psalm +.DEFAULT_GOAL:=help + +help: ## Show this help. + @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//' + +phpstan: ## Execute phpstan + composer phpstan + +psalm: ## execute psalm + vendor/bin/psalm + +test: ## Execute phpunit + composer test + +coverage: ## Execute the coverage test + composer test + +phpcs: ## execute phpcs + composer cs + +phpfix: ## Fix some warnings from phpcs + vendor/bin/phpcbf --standard=PSR12 app + git commit -m "Auto Fix PSR12 Style" . + +allcheck: phpcs phpstan test ## it performs all check (phpcs, phpstan, tests) + +push: allcheck ## It performs all check and then git push on the current branch + git push origin HEAD + +install: ## executes composer install, key:generate and npm install + cp .env.example .env + composer install + php artisan key:generate + npm i + npm run production diff --git a/Makefile.deploy b/Makefile.deploy new file mode 100644 index 0000000..b8ddf2e --- /dev/null +++ b/Makefile.deploy @@ -0,0 +1,64 @@ +.PHONY: help + +include Makefile.param.prod + + + + +all: help + + +help: + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + + +remotedu: ## Execute DU command in htdocs dir, just for diagnostic purpose + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; du -h" + +rsynca: ## execute Rsync from current dir and remote htdocs ${WEB_DIR} + rsync ${DRY_RUN} -rlcgoDvzi -e "ssh" --delete . ${SSH_ALIAS}:${WEB_DIR} --exclude-from 'exclude-list.txt' + + +copyenvprod: + scp .env.prod ${SSH_ALIAS}:${WEB_DIR}/.env + +fixgroupuser: ## Add the right group(www) to the deploy user (ssh user) + ssh -t ${SSH_ALIAS} "sudo usermod -a -G ${WEB_GROUP} ${SSH_USER}" + +fixownership: ## fix the ownership for user ${WEB_USER} into ${WEB_DIR}/storage + ssh -t ${SSH_ALIAS} "sudo chown -R ${WEB_USER}:${WEB_GROUP} ${WEB_DIR}/storage; ls -lao ${WEB_DIR}/storage" + + + +newdeploy: buildfrontend rsynca copyenvprod fixgroupuser fixownership migrate ##first deploy + +migratestatus: ## list the migration status + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate:status --env=prod" + +migrate: ## Execute migrate command for DB schema + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate --env=prod" + +migrateseed: ## Execute migrate command for DB schema + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate:refresh --seed --env=prod" + +migraterefresh: ## Execute migrate command for DB schema + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan migrate:refresh" + +buildfrontend: ## execute npm task to compile frontend assets (js and css...) + npm run build + +optimize: ## Optimize application in production + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan config:cache; php artisan route:cache; php artisan view:cache" + +laralens: ## Execute Diagnostic on the server + ssh ${SSH_ALIAS} "cd ${WEB_DIR}; php artisan laralens:diagnostic" + +composerinstallnodev: + composer install --no-dev + +installdevdeps: + composer install + npm run dev + php artisan config:clear + +deploy: buildfrontend composerinstallnodev rsynca copyenvprod migrate installdevdeps diff --git a/Makefile.param.dist b/Makefile.param.dist new file mode 100644 index 0000000..d643750 --- /dev/null +++ b/Makefile.param.dist @@ -0,0 +1,7 @@ +SSH_ALIAS=some.vm +SSH_USER=deploy +WEB_DIR=/var/www/htdocs/laravel8 +WEB_USER=www-data +WEB_GROUP=www-data +# DRY_RUN=--dry-run +DRY_RUN= diff --git a/composer.json b/composer.json index 7acb041..ccc7371 100644 --- a/composer.json +++ b/composer.json @@ -51,7 +51,8 @@ "@php artisan key:generate --ansi", "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", "@php artisan migrate --graceful --ansi" - ] + ], + "cs":"pint" }, "extra": { "laravel": { diff --git a/exclude-list.txt b/exclude-list.txt new file mode 100644 index 0000000..320dd8d --- /dev/null +++ b/exclude-list.txt @@ -0,0 +1,107 @@ +.git +.sass-cache/ +Makefile* +exclude-list.txt +nohup.out +composer.phar +node_modules +.env* +.idea +.editorconfig +.babelrc +.gitattributes +.### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + + +# storage +storage/framework/cache/* +storage/framework/sessions/* +storage/framework/views/* +storage/logs/* +storage/app/* +storage/testing/* + + + +exports/* +app/config/prod/* +app/config/stage/* +resources/assets +public/files +public/chunks +public/storage +bootstrap/cache/config.php + +.phpunit.result.cache From ae15e01c2ac90624293ba583c193eee6c395d0b5 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sat, 16 Mar 2024 23:27:07 +0100 Subject: [PATCH 09/16] fix styles --- app/Console/Commands/GenerateWorkflow.php | 2 +- app/Livewire/ConfiguratorForm.php | 7 ++++--- app/Objects/GuesserFiles.php | 1 + app/Objects/WorkflowGenerator.php | 2 +- routes/web.php | 2 -- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Console/Commands/GenerateWorkflow.php b/app/Console/Commands/GenerateWorkflow.php index 2a0d57a..14319e1 100644 --- a/app/Console/Commands/GenerateWorkflow.php +++ b/app/Console/Commands/GenerateWorkflow.php @@ -239,7 +239,7 @@ public function handle() $generator->stepNodejs = true; $generator->stepNodejsVersion = '18.x'; $versionFromNvmrc = $generator->readNvmrc($guesserFiles - ->getNvmrcPath()); + ->getNvmrcPath()); if ($versionFromNvmrc !== '') { $generator->stepNodejsVersion = $versionFromNvmrc; } diff --git a/app/Livewire/ConfiguratorForm.php b/app/Livewire/ConfiguratorForm.php index 0e8e789..a44cc9f 100644 --- a/app/Livewire/ConfiguratorForm.php +++ b/app/Livewire/ConfiguratorForm.php @@ -22,11 +22,11 @@ */ class ConfiguratorForm extends Component { - use WithRateLimiting; use BaseWorkflow; use CodeQuality; - use LaravelStuff; use Deploy; + use LaravelStuff; + use WithRateLimiting; public string $code = ''; @@ -116,8 +116,9 @@ public function updated(string $propertyName): void public function templateLaravelApp() { - $this->setTemplate("laravelapp"); + $this->setTemplate('laravelapp'); } + public function setTemplate($x) { if (in_array($x, ['laravelapp', 'laravelpostgresql', 'laravelpackage', 'phppackage'])) { diff --git a/app/Objects/GuesserFiles.php b/app/Objects/GuesserFiles.php index 1f43ee6..9347694 100644 --- a/app/Objects/GuesserFiles.php +++ b/app/Objects/GuesserFiles.php @@ -205,6 +205,7 @@ public static function detectLaravelVersionFromTestbench(string $testbenchVersio } catch (\Exception $e) { $stepLaravelVersions = []; } + //$this->ste = $stepPhp; return $stepLaravelVersions; } diff --git a/app/Objects/WorkflowGenerator.php b/app/Objects/WorkflowGenerator.php index 9c8a398..0a7b9d0 100644 --- a/app/Objects/WorkflowGenerator.php +++ b/app/Objects/WorkflowGenerator.php @@ -13,8 +13,8 @@ class WorkflowGenerator { use BaseWorkflow; use CodeQuality; - use LaravelStuff; use Deploy; + use LaravelStuff; public const DB_TYPE_NONE = 'none'; diff --git a/routes/web.php b/routes/web.php index 9cc73ca..64fe2fb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,7 +6,6 @@ use App\Models\Configuration; use Illuminate\Support\Facades\Route; - Route::get('/', [ConfiguratorController::class, 'index'])->name('index'); Route::get('/about', [ConfiguratorController::class, 'about'])->name('about'); @@ -31,4 +30,3 @@ Route::get('/configurations', function () { return ConfigurationResource::collection(Configuration::all()); }); - From eab8bebdd9dd04fb6b1595dbdbdf76e874ccac53 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 08:50:05 +0100 Subject: [PATCH 10/16] Updating Test to PestPHP2 (and Livewire3) --- app/Livewire/ConfiguratorForm.php | 4 +- composer.json | 9 +- composer.lock | 395 ++++++++++++++++-- database/test.db | Bin 0 -> 86016 bytes phpstan.neon | 12 + .../components/form/input-checkbox.blade.php | 2 +- .../components/form/input-select.blade.php | 2 +- .../components/form/input-text.blade.php | 2 +- tests/Feature/DatabaseFormTest.php | 73 ++++ tests/Feature/DeployTest.php | 25 ++ tests/Feature/PagesTest.php | 20 + tests/Feature/YamlFormTest.php | 248 +++++++++++ tests/Feature/mock-asserts/copy-env.yaml | 2 + tests/Feature/mock-asserts/forge-deploy.yaml | 13 + tests/Feature/mock-asserts/generate-key.yaml | 2 + tests/Feature/mock-asserts/mysql-service.yaml | 18 + .../on-push-branches-wildcard.yaml | 5 + .../mock-asserts/on-push-branches.yaml | 7 + tests/Feature/mock-asserts/phpcs-install.yaml | 4 + .../Feature/mock-asserts/phpcs-noinstall.yaml | 3 + tests/Feature/mock-asserts/phpcs-srcdir.yaml | 4 + .../mock-asserts/phpstan-conffile.yaml | 3 + .../Feature/mock-asserts/phpstan-install.yaml | 4 + .../mock-asserts/phpstan-noinstall.yaml | 3 + tests/Feature/mock-asserts/ploi-deploy.yaml | 6 + .../mock-asserts/postgresql-service.yaml | 18 + .../mock-asserts/sqlite-migration.yaml | 8 + .../mock-asserts/strategy-php-8-74.yaml | 10 + tests/Feature/mock-asserts/vapor-deploy.yaml | 6 + tests/Pest.php | 19 + tests/Unit/GuesserTest.php | 49 +++ 31 files changed, 931 insertions(+), 45 deletions(-) create mode 100644 database/test.db create mode 100644 phpstan.neon create mode 100644 tests/Feature/DatabaseFormTest.php create mode 100644 tests/Feature/DeployTest.php create mode 100644 tests/Feature/PagesTest.php create mode 100644 tests/Feature/YamlFormTest.php create mode 100644 tests/Feature/mock-asserts/copy-env.yaml create mode 100644 tests/Feature/mock-asserts/forge-deploy.yaml create mode 100644 tests/Feature/mock-asserts/generate-key.yaml create mode 100644 tests/Feature/mock-asserts/mysql-service.yaml create mode 100644 tests/Feature/mock-asserts/on-push-branches-wildcard.yaml create mode 100644 tests/Feature/mock-asserts/on-push-branches.yaml create mode 100644 tests/Feature/mock-asserts/phpcs-install.yaml create mode 100644 tests/Feature/mock-asserts/phpcs-noinstall.yaml create mode 100644 tests/Feature/mock-asserts/phpcs-srcdir.yaml create mode 100644 tests/Feature/mock-asserts/phpstan-conffile.yaml create mode 100644 tests/Feature/mock-asserts/phpstan-install.yaml create mode 100644 tests/Feature/mock-asserts/phpstan-noinstall.yaml create mode 100644 tests/Feature/mock-asserts/ploi-deploy.yaml create mode 100644 tests/Feature/mock-asserts/postgresql-service.yaml create mode 100644 tests/Feature/mock-asserts/sqlite-migration.yaml create mode 100644 tests/Feature/mock-asserts/strategy-php-8-74.yaml create mode 100644 tests/Feature/mock-asserts/vapor-deploy.yaml create mode 100644 tests/Unit/GuesserTest.php diff --git a/app/Livewire/ConfiguratorForm.php b/app/Livewire/ConfiguratorForm.php index a44cc9f..649e6ad 100644 --- a/app/Livewire/ConfiguratorForm.php +++ b/app/Livewire/ConfiguratorForm.php @@ -114,12 +114,12 @@ public function updated(string $propertyName): void $this->result = ' '; } - public function templateLaravelApp() + public function templateLaravelApp(): void { $this->setTemplate('laravelapp'); } - public function setTemplate($x) + public function setTemplate(string $x): void { if (in_array($x, ['laravelapp', 'laravelpostgresql', 'laravelpackage', 'phppackage'])) { $this->template = $x; diff --git a/composer.json b/composer.json index ccc7371..133e91d 100644 --- a/composer.json +++ b/composer.json @@ -16,12 +16,14 @@ }, "require-dev": { "fakerphp/faker": "^1.23", + "larastan/larastan": "^2.0", "laravel/pint": "^1.14", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "pestphp/pest": "^2.34", "pestphp/pest-plugin-laravel": "^2.3", + "pestphp/pest-plugin-livewire": "^2.1", "spatie/laravel-ignition": "^2.4" }, "autoload": { @@ -52,7 +54,12 @@ "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", "@php artisan migrate --graceful --ansi" ], - "cs":"pint" + "cs":"pint", + "test": "pest --order-by random", + "phpstan": "phpstan analyse -c ./phpstan.neon --no-progress", + "all": [ + "@test", "@cs", "@phpstan" + ] }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index cea3926..908e855 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "95c89d87c4454a1f093b4da03c5fbe82", + "content-hash": "bf1ca98dcb83459bf5f827cbfd674eca", "packages": [ { "name": "brick/math", @@ -1182,16 +1182,16 @@ }, { "name": "laravel/framework", - "version": "v11.0.5", + "version": "v11.0.7", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "9d9d74b1b690c944b8a3d0ebaf28f79101da1589" + "reference": "28eabe9dcdcb017a21ce226eda4538c5c8c93b1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/9d9d74b1b690c944b8a3d0ebaf28f79101da1589", - "reference": "9d9d74b1b690c944b8a3d0ebaf28f79101da1589", + "url": "https://api.github.com/repos/laravel/framework/zipball/28eabe9dcdcb017a21ce226eda4538c5c8c93b1c", + "reference": "28eabe9dcdcb017a21ce226eda4538c5c8c93b1c", "shasum": "" }, "require": { @@ -1383,7 +1383,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-03-13T16:21:22+00:00" + "time": "2024-03-15T23:17:58+00:00" }, { "name": "laravel/prompts", @@ -1758,16 +1758,16 @@ }, { "name": "league/flysystem", - "version": "3.25.0", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "4c44347133618cccd9b3df1729647a1577b4ad99" + "reference": "abbd664eb4381102c559d358420989f835208f18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4c44347133618cccd9b3df1729647a1577b4ad99", - "reference": "4c44347133618cccd9b3df1729647a1577b4ad99", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/abbd664eb4381102c559d358420989f835208f18", + "reference": "abbd664eb4381102c559d358420989f835208f18", "shasum": "" }, "require": { @@ -1832,7 +1832,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.25.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.25.1" }, "funding": [ { @@ -1844,20 +1844,20 @@ "type": "github" } ], - "time": "2024-03-09T17:06:45+00:00" + "time": "2024-03-16T12:53:19+00:00" }, { "name": "league/flysystem-local", - "version": "3.23.1", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00" + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", "shasum": "" }, "require": { @@ -1891,8 +1891,7 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" }, "funding": [ { @@ -1904,7 +1903,7 @@ "type": "github" } ], - "time": "2024-01-26T18:25:23+00:00" + "time": "2024-03-15T19:58:44+00:00" }, { "name": "league/mime-type-detection", @@ -3075,16 +3074,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.0", + "version": "v0.12.2", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" + "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9185c66c2165bbf4d71de78a69dccf4974f9538d", + "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d", "shasum": "" }, "require": { @@ -3148,9 +3147,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.2" }, - "time": "2023-12-20T15:28:09+00:00" + "time": "2024-03-17T01:53:00+00:00" }, { "name": "ralouphie/getallheaders", @@ -6555,6 +6554,108 @@ }, "time": "2024-03-08T09:58:59+00:00" }, + { + "name": "larastan/larastan", + "version": "v2.9.2", + "source": { + "type": "git", + "url": "https://github.com/larastan/larastan.git", + "reference": "a79b46b96060504b400890674b83f66aa7f5db6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larastan/larastan/zipball/a79b46b96060504b400890674b83f66aa7f5db6d", + "reference": "a79b46b96060504b400890674b83f66aa7f5db6d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.8.2", + "phpstan/phpstan": "^1.10.50" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "nikic/php-parser": "^4.17.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.0", + "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.0", + "phpunit/phpunit": "^9.6.13 || ^10.5" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v2.9.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/canvural", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-02-27T03:16:03+00:00" + }, { "name": "laravel/pint", "version": "v1.14.0", @@ -6924,16 +7025,16 @@ }, { "name": "pestphp/pest", - "version": "v2.34.2", + "version": "v2.34.4", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "853f6efce6bc86636f48a0e921a44ccee9a66cf3" + "reference": "6a1161ead830294ef8e21fab83c0bd118b0df7cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/853f6efce6bc86636f48a0e921a44ccee9a66cf3", - "reference": "853f6efce6bc86636f48a0e921a44ccee9a66cf3", + "url": "https://api.github.com/repos/pestphp/pest/zipball/6a1161ead830294ef8e21fab83c0bd118b0df7cc", + "reference": "6a1161ead830294ef8e21fab83c0bd118b0df7cc", "shasum": "" }, "require": { @@ -6943,10 +7044,10 @@ "pestphp/pest-plugin": "^2.1.1", "pestphp/pest-plugin-arch": "^2.7.0", "php": "^8.1.0", - "phpunit/phpunit": "^10.5.12" + "phpunit/phpunit": "^10.5.13" }, "conflict": { - "phpunit/phpunit": ">10.5.12", + "phpunit/phpunit": ">10.5.13", "sebastian/exporter": "<5.1.0", "webmozart/assert": "<1.11.0" }, @@ -7016,7 +7117,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v2.34.2" + "source": "https://github.com/pestphp/pest/tree/v2.34.4" }, "funding": [ { @@ -7028,7 +7129,7 @@ "type": "github" } ], - "time": "2024-03-11T18:05:47+00:00" + "time": "2024-03-14T19:44:18+00:00" }, { "name": "pestphp/pest-plugin", @@ -7245,6 +7346,72 @@ ], "time": "2024-02-17T10:04:08+00:00" }, + { + "name": "pestphp/pest-plugin-livewire", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-livewire.git", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "shasum": "" + }, + "require": { + "livewire/livewire": "^2.12.3|^3.0", + "pestphp/pest": "^2.9.1", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.5.10", + "pestphp/pest-dev-tools": "^2.12.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Livewire Plugin", + "keywords": [ + "framework", + "livewire", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v2.1.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-07-20T16:28:21+00:00" + }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -7531,6 +7698,94 @@ }, "time": "2024-02-23T11:10:43+00:00" }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.9.0", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "011fa18a4e55591fac6545a821921dd1d61c6984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984", + "reference": "011fa18a4e55591fac6545a821921dd1d61c6984", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpbench/phpbench": "^1.1", + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.9.12", + "phpstan/phpstan-phpunit": "^1.3.3", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "~3.0.2" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/sql-parser", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "query linter", + "sql", + "sql lexer", + "sql linter", + "sql parser", + "sql syntax highlighter", + "sql tokenizer" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "funding": [ + { + "url": "https://www.phpmyadmin.net/donate/", + "type": "other" + } + ], + "time": "2024-01-20T20:34:02+00:00" + }, { "name": "phpstan/phpdoc-parser", "version": "1.26.0", @@ -7578,6 +7833,68 @@ }, "time": "2024-02-23T16:05:55+00:00" }, + { + "name": "phpstan/phpstan", + "version": "1.10.62", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/cd5c8a1660ed3540b211407c77abf4af193a6af9", + "reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9", + "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": "2024-03-13T12:27:20+00:00" + }, { "name": "phpunit/php-code-coverage", "version": "10.1.14", @@ -7901,16 +8218,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.12", + "version": "10.5.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "41a9886b85ac7bf3929853baf96b95361cd69d2b" + "reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41a9886b85ac7bf3929853baf96b95361cd69d2b", - "reference": "41a9886b85ac7bf3929853baf96b95361cd69d2b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/20a63fc1c6db29b15da3bd02d4b6cf59900088a7", + "reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7", "shasum": "" }, "require": { @@ -7982,7 +8299,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.12" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.13" }, "funding": [ { @@ -7998,7 +8315,7 @@ "type": "tidelift" } ], - "time": "2024-03-09T12:04:07+00:00" + "time": "2024-03-12T15:37:41+00:00" }, { "name": "sebastian/cli-parser", diff --git a/database/test.db b/database/test.db new file mode 100644 index 0000000000000000000000000000000000000000..87cabca0136243ef4b3b6c916bb88243d52e044b GIT binary patch literal 86016 zcmeI*%WvDr9S3mImMuFEE6=Jx5tN}9u$6}^%9dY6(K@!X4H7$EKQ>(i3t}veWv(fb zAt}c~8Whg%rI(xw^w$5N=(*SSvgj^)=%wBL8}?7=Z}_lCNlrFKfW*O94rOXyoca8Q zqX!*(lrBiJEd54NBuN^l?J8}TX}d(*Pif21mfYlI=M~?_rHTDN zo~HtRg}hYwtdKwd^8Cwl{yG25w`aZ`E)AFR-{ij;_;>V``#$=5MSIAC00iE>z~M)i z^Tp9o`9&dM+ZL~}+Ah~Er?%&(cCRe1FE4B^E1L^<9xN+rDo0hu)ji%)m3`*bcA2Nx zPN3LL%etkg&QqIvJ#+YhYkDj&9a~jQJK%MmuIPGZgLy55+KpQ;m8w?;i}yxl$+QiA z;6Jfwsnc0AaKguWszbV#dT=%WPwDT)Vo^SP-X2|;f2qfaUNx3|W;MC01pI)8*B;`V z52SQyu=uOus|OMd;qvb<!QKj(#?C1ik5VPdAP1aW5Qm+)Ux_BgWa`u`U;{U6a3* z!!RZNPQH(1gOwzUPMb#036`{+%r2UZrmHi<@QCE72Bn4tS)JQK6kJMjS<7-5wc8o& zEKt&PYC2>mE_JO``o+j#aq-%5;Z8=PYsp@LR)it3DjW`<%NIY^FaB~=KKxlY|96;aQ6Rr? zwtcxVh&WQpN9=Yed zc5Iu|QZJq;JC`Gxp}n4xj$OX^L5;h;n~M9NK6{Q%yQ2^;Zmq8`uWss__g0oSHWyab zN{7;5zPNZ(KKywYBbWL9Q^zxOT4Z_P>%2ihi&m(PtbEKDpF|zG>55UHItmEmu<>wd z`cv^Hb%CZOy?p5?*zs^M8?}zycB{Q25jcCCg3#k-POnK_V!3=#qt_kzP)0nW?xc8v{)u>P^VL8&^e{WT%VmdoR8KrtCMW2RT5fIDpw~P-h8*D^ zo1^b@&)hLP7T)lwHJTwk8x_laW1C)GWU1e9*;wlv6!YP;&?J7L=yN((>>BTQ*q?Fg z$Q&1gzeP1mhabuL;`QtDi_2k~4YM9U1Go43GA*g?j1#Q}N7Z{WZL^@Z+YV&1(w4+~ zb9&P+75-EBOTjDrx-c~I-;uwHMBE?%0SG_<0uX=z1Rwwb2tWV=?@(YopOdzRE9J_R zUY^voX}waOnyZxc=<}5LnojtZ`{rOydfZWRcB-0`Og=l;!@|{poaD3%SM^Fo)2eex z;qFhOqiR|%C)GQvX){T+?5D0#m5KhG#HflkrpQ~0gw#=2tWV= z5P$##AOHafKmY;|fWRphI3xN_KmURwwb2tWV=5P$##AOHafKmYID6YB2i4&&=nWEtjkFYNO>pvD919_oX>G*hS%=e!5e2FrC}s>GTlh>i*u$!!vw^2oG|8s$;4W9x3y-&N-WugQ-d>f0W(YrEW6=O3##)X(D#%kub>rU=XY z4zv8E{84hIT7#K39l+oeAjcJLG??9FmL7O!z0SRK8$KP&Xj&B7cDqR${T=RbLX?%V zazlJkqkh2MwOuz>4|_Q~QK5|42`#)Y)BViElsKv=yGjUOP_el6c2YZT+U&$Z-0~u$ z?yRxe9;*w1NJi8NGd|_E;dtHYt8Qb(5rfENrFywR1GnoGy2r{G^>*wQ-D}}}neM5# zW6I~$1B1JC1a8+_8+87dmKo4ayQb^$9q!$>9h)CpUPLWbE>T!M;I(GJsY^}Uq!_jb zmgG=q-CZ~16lX1x;D&AP(6KYwOQx5}Qkg5x9ies4_5)^Fne47Z(ij7?wqP@><(t_E zQPZ8dsn$0g$Lh)!>j529%)3+%I*YYCvDEbUGQ%MoQGd(lt6a>w)Pz~{nblb5Zn(Cj z(l-dzqaZEr@>;gByXL`0;CM8P*0|R&eX+7-CdYcyUNP$)33Oz9%xzA|{624G!esAn z@`fvx#=E9CThs||?@#apMu|L`y^h;j?kpG$xxr{69XyB^&17(y)YK^zp0T2WSTnY1 zLhddlQ_~ca{F$niCvH$DX6gQxIv4KGg!>|8UY!p2MasNd4fjRLygEhq&&6_(>P>Ro z)Km}81`$R&tmU-gHBC(Xc%)JKBfh=sID5(3&1)VPPaExuae*z*qGLZ=zVq9M5AW++ z>kl%8?mAwbZB31`M;!=200Izz00bZa0SG_<0uX=z1Wt;LazP|zg^KmY;|fB*y_009U<00Izzz*`o;|Nno>plA*P5P$##AOHafKmY;| MfB*y_@E!{MAEQ=I3IG5A literal 0 HcmV?d00001 diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..776919f --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,12 @@ +includes: + - ./vendor/larastan/larastan/extension.neon +parameters: + reportUnmatchedIgnoredErrors: false + checkMissingIterableValueType: false + ignoreErrors: + - '#Parameter .1 \$separator of function explode expects non-empty-string, string given.#' + + level: 6 + paths: + - app + diff --git a/resources/views/components/form/input-checkbox.blade.php b/resources/views/components/form/input-checkbox.blade.php index bd0c0dc..7801c81 100644 --- a/resources/views/components/form/input-checkbox.blade.php +++ b/resources/views/components/form/input-checkbox.blade.php @@ -11,7 +11,7 @@
diff --git a/resources/views/components/form/input-select.blade.php b/resources/views/components/form/input-select.blade.php index 4309faf..0564725 100644 --- a/resources/views/components/form/input-select.blade.php +++ b/resources/views/components/form/input-select.blade.php @@ -21,7 +21,7 @@ - @foreach( $list as $key=> $item) @endforeach diff --git a/resources/views/components/form/input-text.blade.php b/resources/views/components/form/input-text.blade.php index 99cf4e3..9d28a16 100644 --- a/resources/views/components/form/input-text.blade.php +++ b/resources/views/components/form/input-text.blade.php @@ -12,7 +12,7 @@ - @if ($help !== "")

diff --git a/tests/Feature/DatabaseFormTest.php b/tests/Feature/DatabaseFormTest.php new file mode 100644 index 0000000..8a53aab --- /dev/null +++ b/tests/Feature/DatabaseFormTest.php @@ -0,0 +1,73 @@ +livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->call('submitForm') + ->assertSee(readAsset('on-push-branches.yaml')) + ->assertSee(readAsset('mysql-service.yaml')); + +test('database default hints for migration') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepRunMigrations', false) + ->call('submitForm') + ->assertSee(readAsset('on-push-branches.yaml')) + ->assertSee(readAsset('mysql-service.yaml')) + ->assertCount('hints', 1); + +test('no database and no migrations') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test No Database') + ->set('onPullrequest', true) + ->set('databaseType', 'none') + ->set('stepRunMigrations', false) + ->call('submitForm') + ->assertHasNoErrors('yaml') + ->assertSet('hints', []) + ->assertDontSee('image: mysql:') + ->assertDontSee('DB_CONNECTION: sqlite'); + +test('generates hint - no database and migrations') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test No Database') + ->set('onPullrequest', true) + ->set('databaseType', 'none') + ->call('submitForm') + ->assertHasNoErrors('yaml') + ->assertCount('hints', 1) + ->assertDontSee('image: mysql:'); + +test('with sqlite database and migrations') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test No Database') + ->set('onPullrequest', true) + ->set('databaseType', 'sqlite') + ->call('submitForm') + ->assertHasNoErrors('yaml') + ->assertCount('hints', 0) + ->assertSee(readAsset('sqlite-migration.yaml')) + ->assertDontSee('image: mysql:'); + +test('test postgresql with migration') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test Postgresql') + ->set('onPullrequest', true) + ->set('databaseType', 'postgresql') + ->call('submitForm') + ->assertHasNoErrors('yaml') + ->assertCount('hints', 0) + ->assertSee(readAsset('postgresql-service.yaml')) + ->assertDontSee('image: mysql:'); + +test('postgresql with no migration') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test Postgresql') + ->set('onPullrequest', true) + ->set('databaseType', 'postgresql') + ->set('stepRunMigrations', false) + ->call('submitForm') + ->assertHasNoErrors('yaml') + ->assertCount('hints', 1) + ->assertSee(readAsset('postgresql-service.yaml')) + ->assertDontSee('image: mysql:'); diff --git a/tests/Feature/DeployTest.php b/tests/Feature/DeployTest.php new file mode 100644 index 0000000..5857dcc --- /dev/null +++ b/tests/Feature/DeployTest.php @@ -0,0 +1,25 @@ +livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepDeployType', 'ploi') + ->set('stepDeployWebhookType', 'secret') + ->call('submitForm') + ->assertSee(readAsset('ploi-deploy.yaml')); + +test('Vapor Deploy') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepDeployType', 'vapor') + ->call('submitForm') + ->assertSee(readAsset('vapor-deploy.yaml')); + +test('Forge Deploy') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepDeployType', 'forge') + ->set('stepDeployForgeServerName', 'servername') + ->set('stepDeployForgeSiteName', 'sitename') + ->call('submitForm') + ->assertSee(readAsset('forge-deploy.yaml')); diff --git a/tests/Feature/PagesTest.php b/tests/Feature/PagesTest.php new file mode 100644 index 0000000..dbb11b2 --- /dev/null +++ b/tests/Feature/PagesTest.php @@ -0,0 +1,20 @@ +assertOK(); +})->with(['index', 'about', 'dashboard']); + +it('can properly loads the index form', function () { + get(route('index')) + ->AssertSee('Select a workflow template') + ->AssertSee('On - GitHub event that triggers the workflow') + ->AssertSee('Select a workflow template') + ->assertOK(); +}); + +test('not found page') + ->get('/it-does-not-exist') + ->assertSee('Not Found') + ->AssertNotFound(); diff --git a/tests/Feature/YamlFormTest.php b/tests/Feature/YamlFormTest.php new file mode 100644 index 0000000..002d2cf --- /dev/null +++ b/tests/Feature/YamlFormTest.php @@ -0,0 +1,248 @@ +livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('onPullrequest', true) + ->call('submitForm') + ->assertHasNoErrors('yaml'); + +test('form submit empty name') + ->livewire(ConfiguratorForm()) + ->set('name', '') + ->set('onPullrequest', true) + ->call('submitForm') + ->assertHasErrors('name'); + +test('form_submit on manual') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', true) + ->set('onPush', false) + ->call('submitForm') + ->assertHasNoErrors('yaml'); + +test('form submit on events', function () { + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', false) + ->set('onPush', false) + ->set('onPullrequest', false) + ->call('submitForm') + ->assertHasErrors('onEvents'); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', false) + ->set('onPush', true) + ->set('onPullrequest', false) + ->call('submitForm') + ->assertHasNoErrors('onEvents'); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', true) + ->set('onPush', true) + ->set('onPullrequest', false) + ->call('submitForm') + ->assertHasNoErrors('onEvents'); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', true) + ->set('onPush', true) + ->set('onPullrequest', true) + ->call('submitForm') + ->assertHasNoErrors('onEvents'); + + $hints = [ + "You selected all 3 options: 'on Push', 'on Pull Request', and 'Manual Trigger'. I suggest you to select 'Manual Trigger' OR 'on push / on pull request'.", + + "I selected automatically a 'Manual Trigger' for you.", + ]; + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', true) + ->set('onPush', true) + ->set('onPullrequest', true) + ->call('submitForm') + ->assertSet('hints', $hints); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', false) + ->set('onPush', true) + ->set('onPullrequest', true) + ->call('submitForm') + ->assertSet('hints', []); +}); + +test('form submit tests') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', false) + ->set('onPush', true) + ->call('submitForm') + ->assertSee(readAsset('on-push-branches.yaml')) + ->assertSee(readAsset('mysql-service.yaml')); + +test('form submit tests with mySQL') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', false) + ->set('onPush', true) + ->set('databaseType', 'mysql') + ->call('submitForm') + ->assertSee(readAsset('mysql-service.yaml')); + +test('form_submit_test_matrix') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('manualTrigger', false) + ->set('onPush', true) + ->set('matrixLaravel', true) + ->set('matrixLaravelVersions', ['8.*' => '8.*']) + ->set('stepPhpVersions', ['8.0', '7.4']) + ->call('submitForm') + ->assertSee(readAsset('on-push-branches.yaml')) + ->assertSee(readAsset('mysql-service.yaml')) + ->assertSee(readAsset('strategy-php-8-74.yaml')); + +test('dependency stability level: "prefer-stable"') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test Dependency Level') + ->set('dependencyStability', ['prefer-stable']) + ->call('submitForm') + ->assertSee("dependency-stability: [ 'prefer-stable' ]"); + +test('dependency stability level: "prefer-lowest" and "prefer-stable"') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test Dependency Level') + ->set('dependencyStability', ['prefer-lowest', 'prefer-stable']) + ->call('submitForm') + ->assertSee("dependency-stability: [ 'prefer-lowest','prefer-stable' ]"); + +test('without dependency stability level:') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test Without Dependency Level') + ->call('submitForm') + ->assertSee("dependency-stability: [ 'prefer-none' ]"); + +test('form_codequality_tests', function () { + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteStaticAnalysis', true) + ->set('stepInstallStaticAnalysis', false) + ->call('submitForm') + ->assertSee(readAsset('phpstan-noinstall.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteStaticAnalysis', true) + ->set('stepInstallStaticAnalysis', true) + ->call('submitForm') + ->assertSee(readAsset('phpstan-install.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteStaticAnalysis', true) + ->set('stepInstallStaticAnalysis', true) + ->set('stepToolStaticAnalysis', 'larastan') + ->call('submitForm') + ->assertSee(readAsset('phpstan-install.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteStaticAnalysis', true) + ->set('stepInstallStaticAnalysis', true) + ->set('stepToolStaticAnalysis', 'phpstan') + ->call('submitForm') + ->assertDontSee('composer require --dev nunomaduro/larastan') + ->assertSee('composer require --dev phpstan/phpstan'); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteStaticAnalysis', true) + ->set('stepInstallStaticAnalysis', false) + ->call('submitForm') + ->assertDontSee('composer require --dev nunomaduro/larastan') + ->assertDontSee('composer require --dev phpstan/phpstan'); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteStaticAnalysis', true) + ->set('stepInstallStaticAnalysis', false) + ->set('stepPhpstanUseNeon', true) + ->call('submitForm') + ->assertSee(readAsset('phpstan-conffile.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteCodeSniffer', true) + ->set('stepInstallCodeSniffer', false) + ->call('submitForm') + ->assertSee(readAsset('phpcs-noinstall.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteCodeSniffer', true) + ->set('stepInstallCodeSniffer', true) + ->call('submitForm') + ->assertSee(readAsset('phpcs-install.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepExecuteCodeSniffer', true) + ->set('stepDirCodeSniffer', 'src') + ->set('stepInstallCodeSniffer', true) + ->call('submitForm') + ->assertSee(readAsset('phpcs-srcdir.yaml')); +}); + +test('form_keygenerate_tests', function () { + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepGenerateKey', true) + ->call('submitForm') + ->assertSee(readAsset('generate-key.yaml')); + + livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepGenerateKey', false) + ->call('submitForm') + ->assertDontSee('run: php artisan key:generate'); +}); + +test('form copy env') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepCopyEnvTemplateFile', true) + ->call('submitForm') + ->assertSee(readAsset('copy-env.yaml')); + +test('form copy env from ci') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepCopyEnvTemplateFile', true) + ->set('stepEnvTemplateFile', '.env.ci') + ->call('submitForm') + ->assertSee(str_replace('.env.example', '.env.ci', readAsset('copy-env.yaml'))); + +test('form copy env template') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test') + ->set('stepCopyEnvTemplateFile', false) + ->call('submitForm') + ->assertDontSee('- name: Copy .env'); + +test('form branches wildcard') + ->livewire(ConfiguratorForm()) + ->set('name', 'Test Wildcard') + ->set('manualTrigger', false) + ->set('onPush', true) + ->set('onPushBranches', '*') + ->call('submitForm') + ->assertSee(readAsset('on-push-branches-wildcard.yaml')); diff --git a/tests/Feature/mock-asserts/copy-env.yaml b/tests/Feature/mock-asserts/copy-env.yaml new file mode 100644 index 0000000..eae9818 --- /dev/null +++ b/tests/Feature/mock-asserts/copy-env.yaml @@ -0,0 +1,2 @@ + - name: Copy .env + run: php -r "file_exists('.env') || copy('.env.example', '.env');" diff --git a/tests/Feature/mock-asserts/forge-deploy.yaml b/tests/Feature/mock-asserts/forge-deploy.yaml new file mode 100644 index 0000000..b959dda --- /dev/null +++ b/tests/Feature/mock-asserts/forge-deploy.yaml @@ -0,0 +1,13 @@ + # Deployment Step + - name: Setup SSH + uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Require Forge CLI + run: composer global require laravel/forge-cli + - name: Deploy Site + run: | + forge server:switch servername + forge deploy sitename + env: + FORGE_API_TOKEN: ${{ secrets.FORGE_API_TOKEN }} diff --git a/tests/Feature/mock-asserts/generate-key.yaml b/tests/Feature/mock-asserts/generate-key.yaml new file mode 100644 index 0000000..21db4d4 --- /dev/null +++ b/tests/Feature/mock-asserts/generate-key.yaml @@ -0,0 +1,2 @@ + - name: Generate key + run: php artisan key:generate diff --git a/tests/Feature/mock-asserts/mysql-service.yaml b/tests/Feature/mock-asserts/mysql-service.yaml new file mode 100644 index 0000000..b2f19a1 --- /dev/null +++ b/tests/Feature/mock-asserts/mysql-service.yaml @@ -0,0 +1,18 @@ +# Service container Mysql mysql + services: + # Label used to access the service container + mysql: + # Docker Hub image (also with version) + image: mysql:latest + env: + MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_DATABASE: db_test_laravel + ## map the "external" 33306 port with the "internal" 3306 + ports: + - 33306:3306 + # Set health checks to wait until mysql database has started (it takes some seconds to start) + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 diff --git a/tests/Feature/mock-asserts/on-push-branches-wildcard.yaml b/tests/Feature/mock-asserts/on-push-branches-wildcard.yaml new file mode 100644 index 0000000..ab99b91 --- /dev/null +++ b/tests/Feature/mock-asserts/on-push-branches-wildcard.yaml @@ -0,0 +1,5 @@ +name: Test Wildcard +on: + push: + branches: + - '*' diff --git a/tests/Feature/mock-asserts/on-push-branches.yaml b/tests/Feature/mock-asserts/on-push-branches.yaml new file mode 100644 index 0000000..f761a05 --- /dev/null +++ b/tests/Feature/mock-asserts/on-push-branches.yaml @@ -0,0 +1,7 @@ +name: Test +on: + push: + branches: + - main + - develop + - features/** diff --git a/tests/Feature/mock-asserts/phpcs-install.yaml b/tests/Feature/mock-asserts/phpcs-install.yaml new file mode 100644 index 0000000..7c13410 --- /dev/null +++ b/tests/Feature/mock-asserts/phpcs-install.yaml @@ -0,0 +1,4 @@ + - name: Execute Code Sniffer via phpcs + run: | + composer require --dev squizlabs/php_codesniffer + vendor/bin/phpcs --standard=PSR12 app diff --git a/tests/Feature/mock-asserts/phpcs-noinstall.yaml b/tests/Feature/mock-asserts/phpcs-noinstall.yaml new file mode 100644 index 0000000..c5418d9 --- /dev/null +++ b/tests/Feature/mock-asserts/phpcs-noinstall.yaml @@ -0,0 +1,3 @@ + - name: Execute Code Sniffer via phpcs + run: | + vendor/bin/phpcs --standard=PSR12 app diff --git a/tests/Feature/mock-asserts/phpcs-srcdir.yaml b/tests/Feature/mock-asserts/phpcs-srcdir.yaml new file mode 100644 index 0000000..fbf62c6 --- /dev/null +++ b/tests/Feature/mock-asserts/phpcs-srcdir.yaml @@ -0,0 +1,4 @@ + - name: Execute Code Sniffer via phpcs + run: | + composer require --dev squizlabs/php_codesniffer + vendor/bin/phpcs --standard=PSR12 src diff --git a/tests/Feature/mock-asserts/phpstan-conffile.yaml b/tests/Feature/mock-asserts/phpstan-conffile.yaml new file mode 100644 index 0000000..80cead1 --- /dev/null +++ b/tests/Feature/mock-asserts/phpstan-conffile.yaml @@ -0,0 +1,3 @@ + - name: Execute Code Static Analysis (PHP Stan + Larastan) + run: | + vendor/bin/phpstan analyse -c ./phpstan.neon --no-progress diff --git a/tests/Feature/mock-asserts/phpstan-install.yaml b/tests/Feature/mock-asserts/phpstan-install.yaml new file mode 100644 index 0000000..90e1506 --- /dev/null +++ b/tests/Feature/mock-asserts/phpstan-install.yaml @@ -0,0 +1,4 @@ + - name: Execute Code Static Analysis (PHP Stan + Larastan) + run: | + composer require --dev nunomaduro/larastan + vendor/bin/phpstan analyse app -c ./vendor/nunomaduro/larastan/extension.neon --level=4 --no-progress diff --git a/tests/Feature/mock-asserts/phpstan-noinstall.yaml b/tests/Feature/mock-asserts/phpstan-noinstall.yaml new file mode 100644 index 0000000..1f04ac4 --- /dev/null +++ b/tests/Feature/mock-asserts/phpstan-noinstall.yaml @@ -0,0 +1,3 @@ + - name: Execute Code Static Analysis (PHP Stan + Larastan) + run: | + vendor/bin/phpstan analyse app -c ./vendor/nunomaduro/larastan/extension.neon --level=4 --no-progress diff --git a/tests/Feature/mock-asserts/ploi-deploy.yaml b/tests/Feature/mock-asserts/ploi-deploy.yaml new file mode 100644 index 0000000..8b00fc6 --- /dev/null +++ b/tests/Feature/mock-asserts/ploi-deploy.yaml @@ -0,0 +1,6 @@ +# Deployment Step + - name: Deploy via Ploi + uses: Glennmen/ploi-deploy-action@v1.2.0 + with: + # loaded from secret + webhook_url: ${{ secrets.WEBHOOK_URL }} diff --git a/tests/Feature/mock-asserts/postgresql-service.yaml b/tests/Feature/mock-asserts/postgresql-service.yaml new file mode 100644 index 0000000..5fe68d7 --- /dev/null +++ b/tests/Feature/mock-asserts/postgresql-service.yaml @@ -0,0 +1,18 @@ + services: + # Label used to access the service container + postgres: + # Docker Hub image (also with version) + image: postgres:latest + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: db_test_laravel + ## map the "external" 55432 port with the "internal" 5432 + ports: + - 55432:5432 + # Set health checks to wait until postgresql database has started (it takes some seconds to start) + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 diff --git a/tests/Feature/mock-asserts/sqlite-migration.yaml b/tests/Feature/mock-asserts/sqlite-migration.yaml new file mode 100644 index 0000000..9d166d2 --- /dev/null +++ b/tests/Feature/mock-asserts/sqlite-migration.yaml @@ -0,0 +1,8 @@ + - name: Run Migrations +# Set environment + env: + SESSION_DRIVER: array + DB_CONNECTION: sqlite + DB_DATABASE: ":memory:" + + run: php artisan migrate diff --git a/tests/Feature/mock-asserts/strategy-php-8-74.yaml b/tests/Feature/mock-asserts/strategy-php-8-74.yaml new file mode 100644 index 0000000..98c7bb3 --- /dev/null +++ b/tests/Feature/mock-asserts/strategy-php-8-74.yaml @@ -0,0 +1,10 @@ + strategy: + matrix: + operating-system: [ubuntu-latest] + php-versions: [ '8.0','7.4' ] + dependency-stability: [ 'prefer-none' ] + + laravel: [ '8.*' ] + include: + - laravel: 8.* + testbench: 6.* diff --git a/tests/Feature/mock-asserts/vapor-deploy.yaml b/tests/Feature/mock-asserts/vapor-deploy.yaml new file mode 100644 index 0000000..e68a24a --- /dev/null +++ b/tests/Feature/mock-asserts/vapor-deploy.yaml @@ -0,0 +1,6 @@ + - name: Require Vapor CLI + run: composer global require laravel/vapor-cli + - name: Deploy Environment + run: vapor deploy + env: + VAPOR_API_TOKEN: ${{ secrets.VAPOR_API_TOKEN }} diff --git a/tests/Pest.php b/tests/Pest.php index 50ab1e4..7574a14 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -1,5 +1,7 @@ in('Feature'); @@ -46,3 +49,19 @@ function something() { // .. } + +/** + * ConfiguratorForm class name + */ +function ConfiguratorForm(): string +{ + return ConfiguratorForm::class; +} + +/** + * Reads assets file content + */ +function readAsset(string $filename): string +{ + return file_get_contents(__DIR__.'/Feature/mock-asserts/'.$filename); +} diff --git a/tests/Unit/GuesserTest.php b/tests/Unit/GuesserTest.php new file mode 100644 index 0000000..adb1334 --- /dev/null +++ b/tests/Unit/GuesserTest.php @@ -0,0 +1,49 @@ +assertIsArray($arr); + $this->assertCount(0, $arr, 'Invalid testbench version'); + + $arr = GuesserFiles::detectLaravelVersionFromTestbench('4.*|5.*|6.*'); + $this->assertIsArray($arr); + $this->assertCount(3, $arr); + + $arr = GuesserFiles::detectLaravelVersionFromTestbench('5.*|6.*'); + $this->assertIsArray($arr); + $this->assertCount(2, $arr); + $this->assertEquals('8.*', $arr[1]); + + $arr = GuesserFiles::detectLaravelVersionFromTestbench('7.*'); + $this->assertIsArray($arr); + $this->assertCount(1, $arr); + $this->assertEquals('9.*', $arr[0]); + } + + /** + * Test for path guesser. + * + * @return void + */ + public function testPathGuesser() + { + $guesserFiles = new GuesserFiles(); + $guesserFiles->pathFiles('../test'); + + $this->assertEquals($guesserFiles->getEnvDefaultTemplatePath(), '../test/.env.example'); + } +} From dc7ada4a10ba5921bc7f02086a7946468b8d0cee Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 13:48:46 +0100 Subject: [PATCH 11/16] Update CHANGELOG.md --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0eea88e..e3d1f7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ + # Changelog +## 1.0.0 - 2023-03-17 +- Upgrading to Laravel v11 +- Upgrading to PestPHP v2 +- Upgrading to Livewire v3 +- Upgrading to Larastan v2 + + ## 0.7.1 - 2023-05-07 - Switching from Webpack to Vite - Updating node version for auto-generate command From 4c134a8435048feceabae0187f0b36f3800e1e8b Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 13:55:54 +0100 Subject: [PATCH 12/16] Github actions --- .github/workflows/check-php.yml | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/check-php.yml diff --git a/.github/workflows/check-php.yml b/.github/workflows/check-php.yml new file mode 100644 index 0000000..b99ddbc --- /dev/null +++ b/.github/workflows/check-php.yml @@ -0,0 +1,71 @@ +# GithHub Actions Workflow generated with Ghygen +name: Code Quality +on: + push: + branches: + - main + - develop + - features/** + - feature/** + - upgrade/** + +jobs: + laravel-tests: + runs-on: ubuntu-latest + + strategy: + matrix: + operating-system: [ubuntu-latest, windows-latest] + php-versions: [ '8.2', '8.3' ] + exclude: + - operating-system: windows-latest + php-versions: 8.2 + + name: PHP ${{ matrix.php-versions }} - OS ${{ matrix.operating-system}} + + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + - name: Install NPM packages + run: npm ci + - name: Build frontend + run: npm run build + - name: Install PHP versions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + - name: Copy .env + run: php -r "file_exists('.env') || copy('.env.example', '.env');" + - name: Install Dependencies + if: steps.vendor-cache.outputs.cache-hit != 'true' + run: composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + + + - name: Generate key + run: php artisan key:generate + - name: Directory Permissions + run: chmod -R 777 storage bootstrap/cache + + + + # Code quality + - name: Execute tests (Unit and Feature tests) via PHPUnit + # Set environment + env: + DB_CONNECTION: sqlite + DB_DATABASE: ":memory:" + + run: composer test + + + + - name: Execute Code Sniffer via Pint + run: | + composer cs + + - name: Execute Code Static Analysis (PHP Stan + Larastan) + run: | + composer phpstan From 9ad4fd335b8aac720404e1578b120595643d91a2 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 13:58:19 +0100 Subject: [PATCH 13/16] Using Bun for GitHub Actions workflow --- .github/workflows/check-php.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/check-php.yml b/.github/workflows/check-php.yml index b99ddbc..2ed0b2c 100644 --- a/.github/workflows/check-php.yml +++ b/.github/workflows/check-php.yml @@ -25,14 +25,12 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20.x' - - name: Install NPM packages - run: npm ci + - name: Setup Bun js for building frontend + uses: oven-sh/setup-bun@v1 + - name: Install JS packages + run: bun install - name: Build frontend - run: npm run build + run: bun run build - name: Install PHP versions uses: shivammathur/setup-php@v2 with: From d36cd63676e7b37173c1e02338f746b681c8f144 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 14:35:20 +0100 Subject: [PATCH 14/16] Fix migration name --- CHANGELOG.md | 2 +- ...le.php => 2021_02_10_203938_create_configurations_table.php} | 0 ...hp => 2021_03_03_211200_create_log_configurations_table.php} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename database/migrations/{2024_03_15_221117_create_configurations_table.php => 2021_02_10_203938_create_configurations_table.php} (100%) rename database/migrations/{2024_03_15_221159_create_log_configurations_table.php => 2021_03_03_211200_create_log_configurations_table.php} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3d1f7b..c5c22b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog -## 1.0.0 - 2023-03-17 +## 1.0.0 - 2024-03-17 - Upgrading to Laravel v11 - Upgrading to PestPHP v2 - Upgrading to Livewire v3 diff --git a/database/migrations/2024_03_15_221117_create_configurations_table.php b/database/migrations/2021_02_10_203938_create_configurations_table.php similarity index 100% rename from database/migrations/2024_03_15_221117_create_configurations_table.php rename to database/migrations/2021_02_10_203938_create_configurations_table.php diff --git a/database/migrations/2024_03_15_221159_create_log_configurations_table.php b/database/migrations/2021_03_03_211200_create_log_configurations_table.php similarity index 100% rename from database/migrations/2024_03_15_221159_create_log_configurations_table.php rename to database/migrations/2021_03_03_211200_create_log_configurations_table.php From f8450ee6146ee44859b661411e353c9f8d85ab86 Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 14:40:48 +0100 Subject: [PATCH 15/16] Adding LaraLens --- composer.json | 1 + composer.lock | 77 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 2bffcbb..7fe5644 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "php": "^8.2", "composer/semver": "^3.4", "danharrin/livewire-rate-limiting": "^1.3", + "hi-folks/lara-lens": "^1.0", "laravel/framework": "^11.0", "laravel/tinker": "^2.9", "livewire/livewire": "^3.4", diff --git a/composer.lock b/composer.lock index f416b91..899b3ae 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - - "content-hash": "bf1ca98dcb83459bf5f827cbfd674eca", + "content-hash": "ab357480db51fc7000df5152b8fd081d", "packages": [ { "name": "brick/math", @@ -1181,6 +1180,80 @@ ], "time": "2023-12-03T19:50:20+00:00" }, + { + "name": "hi-folks/lara-lens", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Hi-Folks/lara-lens.git", + "reference": "04c2b95888644629e3fc3ba2d7ffe3cf35b0c8c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Hi-Folks/lara-lens/zipball/04c2b95888644629e3fc3ba2d7ffe3cf35b0c8c0", + "reference": "04c2b95888644629e3fc3ba2d7ffe3cf35b0c8c0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^7.8", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.0|^8.1|^8.2|^8.3" + }, + "require-dev": { + "doctrine/dbal": "^3.0|^4.0", + "larastan/larastan": "^1.0.0|^2.0", + "laravel/pint": "^1.4", + "orchestra/testbench": "^7.0|^8.0|^9.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^1.2|^2.3", + "phpunit/phpunit": "^10.5", + "rector/rector": "^0.14|^1.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "HiFolks\\LaraLens\\LaraLensServiceProvider" + ], + "aliases": { + "LaraLens": "HiFolks\\LaraLens\\LaraLensFacade" + } + } + }, + "autoload": { + "psr-4": { + "HiFolks\\LaraLens\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roberto Butti", + "role": "Developer" + } + ], + "description": "Laravel Diagnostic command for configuration, db connection, http request", + "homepage": "https://github.com/hi-folks/lara-lens", + "keywords": [ + "cli", + "command-line", + "console", + "diagnostic", + "hi-folks", + "lara-lens", + "laravel", + "package" + ], + "support": { + "issues": "https://github.com/Hi-Folks/lara-lens/issues", + "source": "https://github.com/Hi-Folks/lara-lens/tree/v1.0.0" + }, + "time": "2024-03-13T21:52:53+00:00" + }, { "name": "laravel/framework", "version": "v11.0.7", From 70015198a5aaf0871eba3d56530a8040fc53132b Mon Sep 17 00:00:00 2001 From: Roberto Butti Date: Sun, 17 Mar 2024 14:42:09 +0100 Subject: [PATCH 16/16] Update bun.lockb --- bun.lockb | Bin 69596 -> 69596 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 92b4e468cde8ab128274e8a12501c845797c5668..e7d1a2bbd735229fc76c6db873ce540e106673c6 100755 GIT binary patch delta 153 zcmV;K0A~N(p9I{W1duKuzMt@2@*S3)qQELdO#JWgCfQl&u8vklLcT*Ra&1M^u}*3; zlQc6Zv*0tGM?k;!N3@XC-`RtwAZQg?1Wm_(xYu#5WNU+V%B146Tu?d&`lzPcIsmkc zQ+&FLHZgAvf%^mNBK|sh1oI_uiy5=Mdn7>!0bVdJH7+qQv+2AA6#+K0@6kOr0XVlU H2m!AL!}3NF delta 153 zcmV;K0A~N(p9I{W1duKuFBZ^v0TP$VpMo9DUqGFjxNkcwfIhw*#ormiu*;C*u}*3; zlk^!Vv*0tGM?n4%$r<!0ssI200000v+2AA6#+D}@6kOr0XMfT H2m!AL!5Bu+