diff --git a/.github/workflows/code_analysis.yaml b/.github/workflows/code_analysis.yaml
index 426354a50..e9c96dfe4 100644
--- a/.github/workflows/code_analysis.yaml
+++ b/.github/workflows/code_analysis.yaml
@@ -17,6 +17,11 @@ jobs:
name: 'Validate rule definitions'
run: php artisan app:validate-rule-definitions
+ # @see https://github.com/rectorphp/jack
+ -
+ name: 'Rector Jack'
+ run: vendor/bin/jack breakpoint --limit 2 --ansi
+
-
name: 'PHPStan'
run: composer phpstan
diff --git a/composer.json b/composer.json
index 5ec2a99d5..71fe5e9ab 100644
--- a/composer.json
+++ b/composer.json
@@ -22,12 +22,13 @@
"barryvdh/laravel-ide-helper": "^3.5",
"driftingly/rector-laravel": "^2.0.2",
"nette/robot-loader": "^4.0",
+ "phpecs/phpecs": "^2.1",
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^2.1.13",
"phpstan/phpstan-webmozart-assert": "^2.0",
"phpunit/phpunit": "11.4",
- "rector/swiss-knife": "^1.0",
- "phpecs/phpecs": "^2.1",
+ "rector/jack": "^0.1.1",
+ "rector/swiss-knife": "^2.0",
"tomasvotruba/class-leak": "^2.0"
},
"autoload": {
diff --git a/composer.lock b/composer.lock
index ba3504c65..878cde394 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": "ccae07866813303e46518521a1282067",
+ "content-hash": "cbe7da95392fd86ac7a42d88ac11fe92",
"packages": [
{
"name": "brick/math",
@@ -1215,16 +1215,16 @@
},
{
"name": "laravel/framework",
- "version": "v12.11.1",
+ "version": "v12.12.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "bd0d62bd9c5196728e428cd695d89ec8640daac1"
+ "reference": "8f6cd73696068c28f30f5964556ec9d14e5d90d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/bd0d62bd9c5196728e428cd695d89ec8640daac1",
- "reference": "bd0d62bd9c5196728e428cd695d89ec8640daac1",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/8f6cd73696068c28f30f5964556ec9d14e5d90d7",
+ "reference": "8f6cd73696068c28f30f5964556ec9d14e5d90d7",
"shasum": ""
},
"require": {
@@ -1426,7 +1426,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-04-30T13:48:39+00:00"
+ "time": "2025-05-01T16:13:12+00:00"
},
{
"name": "laravel/prompts",
@@ -2280,16 +2280,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.9.0",
+ "version": "3.9.1",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "6d16a8a015166fe54e22c042e0805c5363aef50d"
+ "reference": "ced71f79398ece168e24f7f7710462f462310d4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6d16a8a015166fe54e22c042e0805c5363aef50d",
- "reference": "6d16a8a015166fe54e22c042e0805c5363aef50d",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ced71f79398ece168e24f7f7710462f462310d4d",
+ "reference": "ced71f79398ece168e24f7f7710462f462310d4d",
"shasum": ""
},
"require": {
@@ -2382,7 +2382,7 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T12:57:33+00:00"
+ "time": "2025-05-01T19:51:51+00:00"
},
{
"name": "nette/schema",
@@ -3636,16 +3636,16 @@
},
{
"name": "symfony/console",
- "version": "v7.2.5",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "e51498ea18570c062e7df29d05a7003585b19b88"
+ "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88",
- "reference": "e51498ea18570c062e7df29d05a7003585b19b88",
+ "url": "https://api.github.com/repos/symfony/console/zipball/0e2e3f38c192e93e622e41ec37f4ca70cfedf218",
+ "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218",
"shasum": ""
},
"require": {
@@ -3709,7 +3709,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.2.5"
+ "source": "https://github.com/symfony/console/tree/v7.2.6"
},
"funding": [
{
@@ -3725,7 +3725,7 @@
"type": "tidelift"
}
],
- "time": "2025-03-12T08:11:12+00:00"
+ "time": "2025-04-07T19:09:28+00:00"
},
{
"name": "symfony/css-selector",
@@ -4222,16 +4222,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.2.5",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "371272aeb6286f8135e028ca535f8e4d6f114126"
+ "reference": "6023ec7607254c87c5e69fb3558255aca440d72b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/371272aeb6286f8135e028ca535f8e4d6f114126",
- "reference": "371272aeb6286f8135e028ca535f8e4d6f114126",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6023ec7607254c87c5e69fb3558255aca440d72b",
+ "reference": "6023ec7607254c87c5e69fb3558255aca440d72b",
"shasum": ""
},
"require": {
@@ -4280,7 +4280,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.2.5"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.2.6"
},
"funding": [
{
@@ -4296,20 +4296,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-25T15:54:33+00:00"
+ "time": "2025-04-09T08:14:01+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.2.5",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54"
+ "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b1fe91bc1fa454a806d3f98db4ba826eb9941a54",
- "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9dec01e6094a063e738f8945ef69c0cfcf792ec",
+ "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec",
"shasum": ""
},
"require": {
@@ -4394,7 +4394,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v7.2.5"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.2.6"
},
"funding": [
{
@@ -4410,20 +4410,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-28T13:32:50+00:00"
+ "time": "2025-05-02T09:04:03+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.2.3",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3"
+ "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3",
- "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/998692469d6e698c6eadc7ef37a6530a9eabb356",
+ "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356",
"shasum": ""
},
"require": {
@@ -4474,7 +4474,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.2.3"
+ "source": "https://github.com/symfony/mailer/tree/v7.2.6"
},
"funding": [
{
@@ -4490,20 +4490,20 @@
"type": "tidelift"
}
],
- "time": "2025-01-27T11:08:17+00:00"
+ "time": "2025-04-04T09:50:51+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.2.4",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "87ca22046b78c3feaff04b337f33b38510fd686b"
+ "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b",
- "reference": "87ca22046b78c3feaff04b337f33b38510fd686b",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/706e65c72d402539a072d0d6ad105fff6c161ef1",
+ "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1",
"shasum": ""
},
"require": {
@@ -4558,7 +4558,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.2.4"
+ "source": "https://github.com/symfony/mime/tree/v7.2.6"
},
"funding": [
{
@@ -4574,7 +4574,7 @@
"type": "tidelift"
}
],
- "time": "2025-02-19T08:51:20+00:00"
+ "time": "2025-04-27T13:34:41+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -4657,7 +4657,7 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
@@ -4715,7 +4715,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
},
"funding": [
{
@@ -4818,7 +4818,7 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -4879,7 +4879,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
},
"funding": [
{
@@ -4899,19 +4899,20 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
+ "ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@@ -4959,7 +4960,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
},
"funding": [
{
@@ -4975,20 +4976,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
@@ -5039,7 +5040,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
},
"funding": [
{
@@ -5055,11 +5056,11 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-01-02T08:10:11+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
@@ -5115,7 +5116,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
},
"funding": [
{
@@ -5135,7 +5136,7 @@
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
@@ -5194,7 +5195,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0"
},
"funding": [
{
@@ -5439,16 +5440,16 @@
},
{
"name": "symfony/string",
- "version": "v7.2.0",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82"
+ "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82",
- "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82",
+ "url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931",
+ "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931",
"shasum": ""
},
"require": {
@@ -5506,7 +5507,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.2.0"
+ "source": "https://github.com/symfony/string/tree/v7.2.6"
},
"funding": [
{
@@ -5522,20 +5523,20 @@
"type": "tidelift"
}
],
- "time": "2024-11-13T13:31:26+00:00"
+ "time": "2025-04-20T20:18:16+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.2.4",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "283856e6981286cc0d800b53bd5703e8e363f05a"
+ "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a",
- "reference": "283856e6981286cc0d800b53bd5703e8e363f05a",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6",
+ "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6",
"shasum": ""
},
"require": {
@@ -5601,7 +5602,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.2.4"
+ "source": "https://github.com/symfony/translation/tree/v7.2.6"
},
"funding": [
{
@@ -5617,7 +5618,7 @@
"type": "tidelift"
}
],
- "time": "2025-02-13T10:27:23+00:00"
+ "time": "2025-04-07T19:09:28+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -5773,16 +5774,16 @@
},
{
"name": "symfony/var-dumper",
- "version": "v7.2.3",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "82b478c69745d8878eb60f9a049a4d584996f73a"
+ "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a",
- "reference": "82b478c69745d8878eb60f9a049a4d584996f73a",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9c46038cd4ed68952166cf7001b54eb539184ccb",
+ "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb",
"shasum": ""
},
"require": {
@@ -5836,7 +5837,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.2.3"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.2.6"
},
"funding": [
{
@@ -5852,20 +5853,20 @@
"type": "tidelift"
}
],
- "time": "2025-01-17T11:39:41+00:00"
+ "time": "2025-04-09T08:14:01+00:00"
},
{
"name": "symfony/yaml",
- "version": "v7.2.5",
+ "version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912"
+ "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912",
- "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/0feafffb843860624ddfd13478f481f4c3cd8b23",
+ "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23",
"shasum": ""
},
"require": {
@@ -5908,7 +5909,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.2.5"
+ "source": "https://github.com/symfony/yaml/tree/v7.2.6"
},
"funding": [
{
@@ -5924,7 +5925,7 @@
"type": "tidelift"
}
],
- "time": "2025-03-03T07:12:39+00:00"
+ "time": "2025-04-04T10:10:11+00:00"
},
{
"name": "symplify/vendor-patches",
@@ -6026,16 +6027,16 @@
},
{
"name": "vlucas/phpdotenv",
- "version": "v5.6.1",
+ "version": "v5.6.2",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2"
+ "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2",
- "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af",
+ "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af",
"shasum": ""
},
"require": {
@@ -6094,7 +6095,7 @@
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
- "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1"
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2"
},
"funding": [
{
@@ -6106,7 +6107,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-20T21:52:34+00:00"
+ "time": "2025-04-30T23:37:27+00:00"
},
{
"name": "voku/portable-ascii",
@@ -7371,18 +7372,65 @@
],
"time": "2024-10-05T08:39:03+00:00"
},
+ {
+ "name": "rector/jack",
+ "version": "0.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/rectorphp/jack.git",
+ "reference": "dddfc1e2650b67e90e1eb67bda354d9cc6587820"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/rectorphp/jack/zipball/dddfc1e2650b67e90e1eb67bda354d9cc6587820",
+ "reference": "dddfc1e2650b67e90e1eb67bda354d9cc6587820",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "bin": [
+ "bin/jack"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Rector\\SwissKnife\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Swiss knife in pocket of every upgrade architect",
+ "support": {
+ "issues": "https://github.com/rectorphp/jack/issues",
+ "source": "https://github.com/rectorphp/jack/tree/0.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/rectorphp",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2025-05-02T10:59:09+00:00"
+ },
{
"name": "rector/swiss-knife",
- "version": "1.0.0",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/swiss-knife.git",
- "reference": "b2302d518ff96ff76ae5f64e9f833e7cdcb3271c"
+ "reference": "32688d02c0f84b12dc98b137e13e87a42203ed96"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/swiss-knife/zipball/b2302d518ff96ff76ae5f64e9f833e7cdcb3271c",
- "reference": "b2302d518ff96ff76ae5f64e9f833e7cdcb3271c",
+ "url": "https://api.github.com/repos/rectorphp/swiss-knife/zipball/32688d02c0f84b12dc98b137e13e87a42203ed96",
+ "reference": "32688d02c0f84b12dc98b137e13e87a42203ed96",
"shasum": ""
},
"require": {
@@ -7392,6 +7440,11 @@
"bin/swiss-knife"
],
"type": "library",
+ "autoload": {
+ "psr-4": {
+ "Rector\\SwissKnife\\": "src"
+ }
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
@@ -7399,7 +7452,7 @@
"description": "Swiss knife in pocket of every upgrade architect",
"support": {
"issues": "https://github.com/rectorphp/swiss-knife/issues",
- "source": "https://github.com/rectorphp/swiss-knife/tree/1.0.0"
+ "source": "https://github.com/rectorphp/swiss-knife/tree/2.2.0"
},
"funding": [
{
@@ -7411,7 +7464,7 @@
"type": "github"
}
],
- "time": "2024-10-01T15:44:55+00:00"
+ "time": "2025-04-13T21:54:21+00:00"
},
{
"name": "sebastian/cli-parser",
diff --git a/resources/docs/jack.md b/resources/docs/jack.md
new file mode 100644
index 000000000..99a6aa815
--- /dev/null
+++ b/resources/docs/jack.md
@@ -0,0 +1,72 @@
+In real world, "jack" is a tool that helps to raise your heavy car one inch at a time. So you can fix any issues down there and drive safely on journeys to come.
+
+In Composer world, Jack helps you to raise dependencies one version at a time, safely and steadily.
+
+
+
+## Install
+
+Rector Jack is downgraded and scoped. It requires **PHP 7.2+** and can be installed on any legacy project.
+
+Install with Composer:
+
+```bash
+composer require rector/jack --dev
+```
+
+## Features
+
+### 1. Too many outdated dependencies? Let your CI tell you
+
+This command checks **major outdated dependencies** in your project. If there is **more than 5**, it will fail:
+
+```bash
+vendor/bin/jack breakpoint
+```
+
+Use `--limit` option to change the number of allowed major outdated dependencies.
+
+
+
+Use this command in CI to prevent too many outdated dependencies. It helps us to keep the project healthy without constant need to checking the dependencies yourself.
+
+
+
+### 2. Open up Next versions
+
+We know we're behind the latest versions of our dependencies, but where to start? Which versions should be force to update first? We can get lot of conflicts if we try to bump wrong end of knot.
+
+Instead, let Composer handle it. How? We open-up package constraints in `composer.json`:
+
+```bash
+vendor/bin/jack open-versions
+```
+
+This command opens up 5 versions to their next nearest step, e.g.:
+
+```diff
+ {
+ "require": {
+ "php": "^7.4",
+- "symfony/console": "5.1.*"
++ "symfony/console": "5.2.*|5.2.*"
+ },
+ "require-dev": {
+- "phpunit/phpunit": "^9.0"
++ "phpunit/phpunit": "^9.0|^10.0"
+ }
+ }
+ }
+```
+
+Then we run Composer to do the work:
+
+```bash
+composer update
+```
+
+You can change number of opened versions with `--limit` option. Run with `--dry-run` to see the proposed changes first.
+
+
+
+See [Jack Github repository](https://github.com/rectorphp/jack) for full documentation.
diff --git a/resources/docs/swiss-knife.md b/resources/docs/swiss-knife.md
index 09543f840..0d684f07a 100644
--- a/resources/docs/swiss-knife.md
+++ b/resources/docs/swiss-knife.md
@@ -34,5 +34,3 @@ It helps you to:
See [Swiss knife Github repository](https://github.com/rectorphp/swiss-knife) for full documentation.
-
-