diff --git a/composer.json b/composer.json index 8b52e1f50..6d35438ea 100644 --- a/composer.json +++ b/composer.json @@ -90,6 +90,7 @@ "symplify/monorepo-builder": "^11.2", "tempest/blade": "dev-main", "thenetworg/oauth2-azure": "^2.2", + "typephp/typephp" : "*", "twig/twig": "^3.16", "vertisan/oauth2-twitch-helix": "^2.0", "wohali/oauth2-discord-new": "^1.2" diff --git a/packages/auth/composer.json b/packages/auth/composer.json index 543714ab1..6de3c4607 100644 --- a/packages/auth/composer.json +++ b/packages/auth/composer.json @@ -3,10 +3,10 @@ "description": "A flexible authentication package for Tempest, providing authentication and authorization.", "require": { "php": "^8.5", - "tempest/core": "3.19.0", - "tempest/router": "3.19.0", - "tempest/database": "3.19.0", - "tempest/mapper": "3.19.0", + "tempest/core": "3.x-dev", + "tempest/router": "3.x-dev", + "tempest/database": "3.x-dev", + "tempest/mapper": "3.x-dev", "league/oauth2-client": "^2.8" }, "require-dev": { diff --git a/packages/cache/composer.json b/packages/cache/composer.json index d776b91f0..b09bb78e1 100644 --- a/packages/cache/composer.json +++ b/packages/cache/composer.json @@ -5,13 +5,13 @@ "php": "^8.5", "psr/cache": "^3.0", "symfony/cache": "^7.3|^8.0", - "tempest/core": "3.19.0", - "tempest/clock": "3.19.0", - "tempest/kv-store": "3.19.0", - "tempest/container": "3.19.0" + "tempest/core": "3.x-dev", + "tempest/clock": "3.x-dev", + "tempest/kv-store": "3.x-dev", + "tempest/container": "3.x-dev" }, "require-dev": { - "tempest/clock": "3.19.0" + "tempest/clock": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/clock/composer.json b/packages/clock/composer.json index 43fce6fc5..307bf62ce 100644 --- a/packages/clock/composer.json +++ b/packages/clock/composer.json @@ -4,7 +4,7 @@ "require": { "php": "^8.5", "psr/clock": "^1.0.0", - "tempest/datetime": "3.19.0" + "tempest/datetime": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/command-bus/composer.json b/packages/command-bus/composer.json index 517775231..125adee1b 100644 --- a/packages/command-bus/composer.json +++ b/packages/command-bus/composer.json @@ -3,9 +3,9 @@ "description": "A command bus component designed to dispatch commands to their respective handlers.", "require": { "php": "^8.5", - "tempest/core": "3.19.0", - "tempest/console": "3.19.0", - "tempest/container": "3.19.0" + "tempest/core": "3.x-dev", + "tempest/console": "3.x-dev", + "tempest/container": "3.x-dev" }, "autoload": { "files": [ diff --git a/packages/console/composer.json b/packages/console/composer.json index 6554bb69f..66e789486 100644 --- a/packages/console/composer.json +++ b/packages/console/composer.json @@ -6,14 +6,14 @@ "require": { "php": "^8.5", "symfony/filesystem": "^7.3|^8.0", - "tempest/core": "3.19.0", - "tempest/container": "3.19.0", - "tempest/generation": "3.19.0", + "tempest/core": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/generation": "3.x-dev", "tempest/highlight": "^2.11.4", - "tempest/log": "3.19.0", - "tempest/reflection": "3.19.0", - "tempest/support": "3.19.0", - "tempest/validation": "3.19.0", + "tempest/log": "3.x-dev", + "tempest/reflection": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/validation": "3.x-dev", "ext-readline": "*" }, "suggest": { diff --git a/packages/container/composer.json b/packages/container/composer.json index 8bf16891e..0d0473a7c 100644 --- a/packages/container/composer.json +++ b/packages/container/composer.json @@ -5,7 +5,7 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/reflection": "3.19.0", + "tempest/reflection": "3.x-dev", "psr/container": "^2.0" }, "autoload": { diff --git a/packages/core/composer.json b/packages/core/composer.json index 0a3e71122..63db9d375 100644 --- a/packages/core/composer.json +++ b/packages/core/composer.json @@ -5,17 +5,17 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/container": "3.19.0", - "tempest/discovery": "3.19.0", - "tempest/reflection": "3.19.0", - "tempest/support": "3.19.0", + "tempest/container": "3.x-dev", + "tempest/discovery": "3.x-dev", + "tempest/reflection": "3.x-dev", + "tempest/support": "3.x-dev", "vlucas/phpdotenv": "^5.6.1", "symfony/cache": "^7.3|^8.0", "filp/whoops": "^2.15" }, "require-dev": { - "tempest/validation": "3.19.0", - "tempest/intl": "3.19.0" + "tempest/validation": "3.x-dev", + "tempest/intl": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/cryptography/composer.json b/packages/cryptography/composer.json index 53d898825..396473f1f 100644 --- a/packages/cryptography/composer.json +++ b/packages/cryptography/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/container": "3.19.0", - "tempest/support": "3.19.0", - "tempest/clock": "3.19.0" + "tempest/container": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/clock": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/database/composer.json b/packages/database/composer.json index 21a96d8d6..f518a46c7 100644 --- a/packages/database/composer.json +++ b/packages/database/composer.json @@ -6,11 +6,11 @@ "require": { "php": "^8.5", "ext-pdo": "*", - "tempest/container": "3.19.0", - "tempest/event-bus": "3.19.0", - "tempest/mapper": "3.19.0", - "tempest/intl": "3.19.0", - "tempest/support": "3.19.0" + "tempest/container": "3.x-dev", + "tempest/event-bus": "3.x-dev", + "tempest/mapper": "3.x-dev", + "tempest/intl": "3.x-dev", + "tempest/support": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/datetime/composer.json b/packages/datetime/composer.json index 575e2aa8d..62d53b90f 100644 --- a/packages/datetime/composer.json +++ b/packages/datetime/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/intl": "3.19.0", - "tempest/support": "3.19.0" + "tempest/intl": "3.x-dev", + "tempest/support": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/debug/composer.json b/packages/debug/composer.json index 96fa73445..df1cf9685 100644 --- a/packages/debug/composer.json +++ b/packages/debug/composer.json @@ -9,7 +9,7 @@ "symfony/var-dumper": "^7.1|^8.0" }, "require-dev": { - "tempest/console": "3.19.0" + "tempest/console": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/discovery/composer.json b/packages/discovery/composer.json index f4da2a8d3..35b8f927c 100644 --- a/packages/discovery/composer.json +++ b/packages/discovery/composer.json @@ -5,13 +5,13 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/reflection": "3.19.0", - "tempest/support": "3.19.0", + "tempest/reflection": "3.x-dev", + "tempest/support": "3.x-dev", "psr/container": "^2.0", "symfony/cache": "^7.3|^8.0" }, "require-dev": { - "tempest/container": "3.19.0", + "tempest/container": "3.x-dev", "php-di/php-di": "^7.0" }, "autoload": { diff --git a/packages/event-bus/composer.json b/packages/event-bus/composer.json index 4213f2c76..08a532fb6 100644 --- a/packages/event-bus/composer.json +++ b/packages/event-bus/composer.json @@ -3,9 +3,9 @@ "description": "A lightweight event bus component designed to facilitate event-driven architecture and asynchronous message handling.", "require": { "php": "^8.5", - "tempest/core": "3.19.0", - "tempest/container": "3.19.0", - "tempest/reflection": "3.19.0" + "tempest/core": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/reflection": "3.x-dev" }, "autoload": { "files": [ diff --git a/packages/generation/composer.json b/packages/generation/composer.json index eb4d61f27..c77fda6d5 100644 --- a/packages/generation/composer.json +++ b/packages/generation/composer.json @@ -8,13 +8,13 @@ "nette/php-generator": "4.2.1", "nette/schema": "^1.3.4", "nikic/php-parser": "^5.3", - "tempest/support": "3.19.0", + "tempest/support": "3.x-dev", "psr/container": "^2.0" }, "require-dev": { "spatie/phpunit-snapshot-assertions": "^5.1.8", "phpunit/phpunit": "^12.5.22", - "tempest/container": "3.19.0" + "tempest/container": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/http-client/composer.json b/packages/http-client/composer.json index 6c832d002..89227ca40 100644 --- a/packages/http-client/composer.json +++ b/packages/http-client/composer.json @@ -7,8 +7,8 @@ "php": "^8.5", "psr/http-client": "^1.0.0", "psr/http-message": "^1.0|^2.0", - "tempest/container": "3.19.0", - "tempest/http": "3.19.0", + "tempest/container": "3.x-dev", + "tempest/http": "3.x-dev", "psr-discovery/http-client-implementations": "^1.4", "psr-discovery/http-factory-implementations": "^1.2" }, diff --git a/packages/http/composer.json b/packages/http/composer.json index 7cf1c6102..aa1367bc8 100644 --- a/packages/http/composer.json +++ b/packages/http/composer.json @@ -5,12 +5,12 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/core": "3.19.0", - "tempest/clock": "3.19.0", - "tempest/console": "3.19.0", - "tempest/mapper": "3.19.0", - "tempest/container": "3.19.0", - "tempest/cryptography": "3.19.0", + "tempest/core": "3.x-dev", + "tempest/clock": "3.x-dev", + "tempest/console": "3.x-dev", + "tempest/mapper": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/cryptography": "3.x-dev", "laminas/laminas-diactoros": "^3.3", "psr/http-factory": "^1.0", "psr/http-message": "^1.0|^2.0", diff --git a/packages/icon/composer.json b/packages/icon/composer.json index fed4dd96d..d9fbb60d6 100644 --- a/packages/icon/composer.json +++ b/packages/icon/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/container": "3.19.0", - "tempest/http-client": "3.19.0", - "tempest/support": "3.19.0", + "tempest/container": "3.x-dev", + "tempest/http-client": "3.x-dev", + "tempest/support": "3.x-dev", "symfony/cache": "^7.3|^8.0" }, "suggest": { diff --git a/packages/idempotency/composer.json b/packages/idempotency/composer.json index 780369efd..2d3159398 100644 --- a/packages/idempotency/composer.json +++ b/packages/idempotency/composer.json @@ -4,14 +4,14 @@ "type": "library", "require": { "php": "^8.5", - "tempest/cache": "3.19.0", - "tempest/container": "3.19.0", - "tempest/datetime": "3.19.0", - "tempest/http": "3.19.0", - "tempest/router": "3.19.0", - "tempest/support": "3.19.0", - "tempest/command-bus": "3.19.0", - "tempest/core": "3.19.0" + "tempest/cache": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/datetime": "3.x-dev", + "tempest/http": "3.x-dev", + "tempest/router": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/command-bus": "3.x-dev", + "tempest/core": "3.x-dev" }, "license": "MIT", "autoload": { diff --git a/packages/intl/composer.json b/packages/intl/composer.json index 30538f278..39cd9156b 100644 --- a/packages/intl/composer.json +++ b/packages/intl/composer.json @@ -7,9 +7,9 @@ "php": "^8.5", "doctrine/inflector": "^2.0", "symfony/yaml": "^7.3|^8.0", - "tempest/core": "3.19.0", - "tempest/container": "3.19.0", - "tempest/support": "3.19.0", + "tempest/core": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/support": "3.x-dev", "ext-intl": "*", "ext-dom": "*" }, diff --git a/packages/kv-store/composer.json b/packages/kv-store/composer.json index c171e689d..8da053793 100644 --- a/packages/kv-store/composer.json +++ b/packages/kv-store/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/support": "3.19.0", - "tempest/datetime": "3.19.0", - "tempest/event-bus": "3.19.0" + "tempest/support": "3.x-dev", + "tempest/datetime": "3.x-dev", + "tempest/event-bus": "3.x-dev" }, "require-dev": { "predis/predis": "^3.0.0" diff --git a/packages/log/composer.json b/packages/log/composer.json index 6b2b3ba08..7be95e40e 100644 --- a/packages/log/composer.json +++ b/packages/log/composer.json @@ -7,7 +7,7 @@ "php": "^8.5", "monolog/monolog": "^3.7.0", "psr/log": "^3.0.0", - "tempest/container": "3.19.0" + "tempest/container": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/mail/composer.json b/packages/mail/composer.json index f79ed3f81..96ec57a23 100644 --- a/packages/mail/composer.json +++ b/packages/mail/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/reflection": "3.19.0", - "tempest/support": "3.19.0", - "tempest/event-bus": "3.19.0", + "tempest/reflection": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/event-bus": "3.x-dev", "symfony/mailer": "^7.2.6|^8.0" }, "require-dev": { diff --git a/packages/mapper/composer.json b/packages/mapper/composer.json index c3e121d3b..59b7dff80 100644 --- a/packages/mapper/composer.json +++ b/packages/mapper/composer.json @@ -5,10 +5,10 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/container": "3.19.0", - "tempest/reflection": "3.19.0", - "tempest/support": "3.19.0", - "tempest/validation": "3.19.0" + "tempest/container": "3.x-dev", + "tempest/reflection": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/validation": "3.x-dev" }, "autoload": { "files": [ diff --git a/packages/mcp/composer.json b/packages/mcp/composer.json index b4c5de093..ea632359a 100644 --- a/packages/mcp/composer.json +++ b/packages/mcp/composer.json @@ -3,16 +3,16 @@ "description": "The PHP framework that gets out of your way.", "require": { "php": "^8.5", - "tempest/console": "3.19.0", - "tempest/container": "3.19.0", - "tempest/core": "3.19.0", - "tempest/discovery": "3.19.0", - "tempest/http": "3.19.0", - "tempest/mapper": "3.19.0", - "tempest/reflection": "3.19.0", - "tempest/router": "3.19.0", - "tempest/support": "3.19.0", - "tempest/validation": "3.19.0" + "tempest/console": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/core": "3.x-dev", + "tempest/discovery": "3.x-dev", + "tempest/http": "3.x-dev", + "tempest/mapper": "3.x-dev", + "tempest/reflection": "3.x-dev", + "tempest/router": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/validation": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/process/composer.json b/packages/process/composer.json index 87f84ce9e..70e199197 100644 --- a/packages/process/composer.json +++ b/packages/process/composer.json @@ -6,9 +6,9 @@ "require": { "php": "^8.5", "symfony/process": "^7.3|^8.0", - "tempest/container": "3.19.0", - "tempest/support": "3.19.0", - "tempest/datetime": "3.19.0" + "tempest/container": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/datetime": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/router/composer.json b/packages/router/composer.json index f15c2854e..8a176a5a8 100644 --- a/packages/router/composer.json +++ b/packages/router/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/http": "3.19.0", - "tempest/view": "3.19.0", + "tempest/http": "3.x-dev", + "tempest/view": "3.x-dev", "tempest/highlight": "^2.11.4", "symfony/var-exporter": "^7.1|^8.0" }, diff --git a/packages/storage/composer.json b/packages/storage/composer.json index 29178330b..f270b6b07 100644 --- a/packages/storage/composer.json +++ b/packages/storage/composer.json @@ -6,7 +6,7 @@ "require": { "php": "^8.5", "league/flysystem": "^3.29.1", - "tempest/container": "3.19.0" + "tempest/container": "3.x-dev" }, "require-dev": { "aws/aws-sdk-php": "^3.338.0", @@ -20,7 +20,7 @@ "league/flysystem-google-cloud-storage": "^3.25.1", "league/mime-type-detection": "^1.16", "microsoft/azure-storage-blob": "^1.5", - "tempest/support": "3.19.0" + "tempest/support": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/validation/composer.json b/packages/validation/composer.json index 692147586..8b38f1b55 100644 --- a/packages/validation/composer.json +++ b/packages/validation/composer.json @@ -7,10 +7,10 @@ "php": "^8.5", "egulias/email-validator": "^4.0.2", "giggsey/libphonenumber-for-php-lite": "^9.0", - "tempest/reflection": "3.19.0", - "tempest/support": "3.19.0", - "tempest/intl": "3.19.0", - "tempest/datetime": "3.19.0" + "tempest/reflection": "3.x-dev", + "tempest/support": "3.x-dev", + "tempest/intl": "3.x-dev", + "tempest/datetime": "3.x-dev" }, "autoload": { "psr-4": { diff --git a/packages/view/composer.json b/packages/view/composer.json index f3ff9de4c..ee1c114a3 100644 --- a/packages/view/composer.json +++ b/packages/view/composer.json @@ -5,10 +5,10 @@ "minimum-stability": "dev", "require": { "php": "^8.5", - "tempest/core": "3.19.0", - "tempest/container": "3.19.0", - "tempest/validation": "3.19.0", - "tempest/clock": "3.19.0", + "tempest/core": "3.x-dev", + "tempest/container": "3.x-dev", + "tempest/validation": "3.x-dev", + "tempest/clock": "3.x-dev", "league/commonmark": "^2.7", "symfony/cache": "^7.3|^8.0" }, diff --git a/typephp.php b/typephp.php new file mode 100644 index 000000000..efdac4ed9 --- /dev/null +++ b/typephp.php @@ -0,0 +1,165 @@ + false): TypePHP boots normally, but turns all + | runtime checks into instant no-ops (pass-through mode). + | - Bootstrap Prevention (TYPEPHP_DISABLE=true): To completely prevent TypePHP + | from booting or registering its stream wrapper during Composer autoload, + | set the environment variable TYPEPHP_DISABLE=true or define('TYPEPHP_DISABLE', true) + | before requiring 'vendor/autoload.php'. + */ + 'enabled' => true, + + /* + |-------------------------------------------------------------------------- + | Function Boundary Contracts (@param & @return) + |-------------------------------------------------------------------------- + | Controls whether function and method parameter/return contracts are enforced. + | When enabled, all parameter and return types (generics, shapes, scalars) + | are enforced uniformly to maintain type state consistency. + */ + 'params' => true, + 'returns' => true, + + /* + |-------------------------------------------------------------------------- + | Respect Ignore Docblock Tags + |-------------------------------------------------------------------------- + | When true (default), @typephp-ignore and @typephp-ignore-file docblock tags + | skip type-checking on specific methods/files. Set to false in CI/CD or + | audit runs to force type-checking on all ignored methods without deleting + | the docblock tags from source code. + */ + 'respect_ignore_tags' => true, + + /* + |-------------------------------------------------------------------------- + | Enable Caching & Cache Directory + |-------------------------------------------------------------------------- + | When enabled, transformed PHP files are cached on disk for speed. + | Set to false to run AST transformations purely in RAM (php://memory). + | + | 'cache_dir' determines where these files are stored. By default (null), + | it uses your system's temp directory. You can change this to a path + | inside your project, e.g., __DIR__ . '/storage/framework/typephp'. + | TypePHP will automatically protect this directory from being re-transformed. + */ + 'cache' => true, + 'cache_dir' => null, + + /* + |-------------------------------------------------------------------------- + | Registered Extensions + |-------------------------------------------------------------------------- + | Explicitly list third-party extension classes that provide path overrides. + */ + 'extensions' => [ + // \Acme\Domain\TypePHPExtension::class, + ], + + /* + |-------------------------------------------------------------------------- + | Array Validation Strategy + |-------------------------------------------------------------------------- + | Controls how collections (list, array, Type[]) are verified: + | + | - 'full' : (Default / Strict) 100% exhaustive scan. Checks every single + | item in every array, guaranteeing every single offending item + | is caught without exception. + | + | - 'hybrid' : (Beartype O(1) Mode) Fast boundary + random sampling on + | arrays > 64 items. Ideal for massive production datasets. + */ + 'array_validation' => 'hybrid', + + /* + |-------------------------------------------------------------------------- + | Respect Native Parameter Nullability + |-------------------------------------------------------------------------- + | When true (default), if a native PHP parameter explicitly declares + | nullable syntax (e.g. ?array $param = null), TypePHP permits null even + | if the DocBlock author omitted "|null" (e.g. @param string[] $param). + | + | Set to false for strict pedantic enforcement where DocBlocks are the + | absolute law and null is rejected unless explicitly typed in the DocBlock. + */ + 'respect_native_nullability' => true, + + /* + |-------------------------------------------------------------------------- + | Inline Variable Validation (@var $x = ...) + |-------------------------------------------------------------------------- + | Fine-grained control over which type categories are enforced on local + | variable assignments with inline @var Type $var docblocks. + | + | Supported options: + | - 'properties': Validates class property assignments (e.g. $this->id = 1). + | - 'generics' : Prebinds generic template instances (e.g. Collection). + | - 'callables' : Wraps inline callbacks (e.g. callable(int): string). + | - 'scalars' : Enforces scalar constraints (e.g. positive-int, non-empty-string). + | - 'arrays' : Enforces array shapes, lists, & typed arrays (e.g. array{id: int}, int[]). + | - 'objects' : Enforces class instance checks (e.g. @var User $user). + */ + 'inline_vars' => [ + 'properties' => true, + 'generics' => true, + 'callables' => true, + 'scalars' => true, + 'arrays' => true, + 'objects' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Stub Files (DocBlock Overrides for Third-Party & Vendor Packages) + |-------------------------------------------------------------------------- + | Path globs or specific file paths containing stub files (.stub, .stub.php, .php) + | that override inaccurate or missing DocBlocks in third-party vendor packages. + */ + 'stubs' => [ + // 'stubs/**', + ], + + /* + |-------------------------------------------------------------------------- + | Included Paths & Whitelisting + |-------------------------------------------------------------------------- + | Globs or specific file paths that should be intercepted and type-checked. + | + | Pattern Specificity: + | More specific patterns take precedence over broader rules. + | You can specify directory globs (e.g. 'src/**'), single vendor packages + | (e.g. 'vendor/my-org/my-package/**'), or single specific files + | (vendor/monologvendor/monolog/monolog/src/Monolog/Logger.php'). + | You can use "*" glob to match any file. + */ + 'include' => [ + 'src/**', + 'tests/**', + ], + + /* + |-------------------------------------------------------------------------- + | Excluded Paths & Single-File Blacklisting + |-------------------------------------------------------------------------- + | Globs or specific file paths that should be ignored by the type checker. + | You can exclude entire directories (e.g. 'vendor/**') or blacklist + | single legacy files inside included directories (e.g. 'src/Legacy/File.php'). + */ + 'exclude' => [ + 'vendor/**', + 'storage/**', + 'var/**', + 'cache/**', + ], +];