{
    "scripts": {
        "test": "composer test:unit",
        "analyse": "vendor/bin/phpstan analyse --configuration=phpstan.neon.dist --memory-limit=1G --no-progress",
        "static": "@analyse",
        "rector:dry-run": "@php -d error_reporting=0 -d display_errors=0 -d log_errors=0 vendor/bin/rector process --dry-run --config rector.php",
        "rector:fix": "@php -d error_reporting=0 -d display_errors=0 -d log_errors=0 vendor/bin/rector process --config rector.php",
        "test:unit": "vendor/bin/pest --testsuite=Unit --colors=always",
        "test:integration": "vendor/bin/pest --testsuite=Integration --colors=always",
        "test:api": [
            "Composer\\Config::disableProcessTimeout",
            "@php -r \"putenv('RUN_API_TESTS=1'); putenv('CONFIG_DB_TARGET=debug'); passthru('vendor/bin/pest --testsuite=Api --colors=always', $exitCode); exit($exitCode);\""
        ],
        "test:api:edge": [
            "Composer\\Config::disableProcessTimeout",
            "@php -r \"putenv('RUN_API_TESTS=1'); putenv('API_TEST_BOOTSTRAP_SCHEMA=1'); putenv('CONFIG_DB_TARGET=debug'); putenv('API_TEST_REQUEST_TIMEOUT=180'); putenv('EDGE_GATEWAY_VIEW_CACHE_TTL=0'); putenv('EDGE_BROKER_URL'); passthru('vendor/bin/pest tests/Api/EdgeGateway*ApiTest.php --colors=always', $exitCode); exit($exitCode);\""
        ],
        "test:integration:edge": [
            "Composer\\Config::disableProcessTimeout",
            "@php -r \"putenv('RUN_INTEGRATION_TESTS=1'); putenv('CONFIG_DB_TARGET=debug'); putenv('EDGE_BROKER_URL'); passthru('vendor/bin/pest tests/Integration/EdgeGateway --colors=always', $exitCode); exit($exitCode);\""
        ],
        "test:ci:unit": [
            "Composer\\Config::disableProcessTimeout",
            "@php tests/Support/run_ci_suite.php unit"
        ],
        "test:ci:integration": [
            "Composer\\Config::disableProcessTimeout",
            "@php tests/Support/run_ci_suite.php integration"
        ],
        "test:ci:api": [
            "Composer\\Config::disableProcessTimeout",
            "@php tests/Support/run_ci_suite.php api"
        ],
        "test:ci:legacy": [
            "Composer\\Config::disableProcessTimeout",
            "@php tests/Support/run_ci_suite.php legacy"
        ],
        "test:ci:all": [
            "Composer\\Config::disableProcessTimeout",
            "@php tests/Support/run_ci_suite.php all"
        ],
        "test:coverage": [
            "@php -r \"is_dir('build/logs') || mkdir('build/logs', 0777, true);\"",
            "@php -r \"if (extension_loaded('pcov')) { passthru('php -d pcov.enabled=1 vendor/bin/pest --testsuite=Unit --coverage --coverage-clover build/logs/clover.xml --colors=always', $exitCode); exit($exitCode); } if (extension_loaded('xdebug')) { passthru('php -d xdebug.mode=coverage vendor/bin/pest --testsuite=Unit --coverage --coverage-clover build/logs/clover.xml --colors=always', $exitCode); exit($exitCode); } fwrite(STDERR, 'No coverage driver available. Enable pcov or xdebug for test:coverage.' . PHP_EOL); exit(1);\""
        ]
    },
    "require-dev": {
        "rector/rector": "^1.2",
        "pestphp/pest": "^3.8",
        "phpunit/phpunit": "^11.5"
    },
    "require": {
        "ext-mysqli": "*",
        "ext-openssl": "*",
        "ext-curl": "*",
        "ext-json": "*",
        "aws/aws-sdk-php": "^3.0",
        "predis/predis": "*",
        "phpmailer/phpmailer": "^6.9.2",
        "stripe/stripe-php": "^16.5",
        "php-http/guzzle7-adapter": "^1.1",
        "nyholm/psr7": "^1.8",
        "mailersend/mailersend": "^0.28.0",
        "spipu/html2pdf": "^5.3",
        "web-auth/webauthn-lib": "^5.2"
    },
    "autoload": {
        "classmap": [
            "classes/",
            "interfaces/",
            "traits/",
            "objects/",
            "modules/",
            "routes/",
            "statistics/"
        ],
        "exclude-from-classmap": [
            "modules/*/vendor/",
            "modules/*/vendor/**"
        ]
    },
    "config": {
        "allow-plugins": {
            "php-http/discovery": true,
            "tbachert/spi": true,
            "pestphp/pest-plugin": true
        }
    }
}
