diff --git a/.github/workflows/tasks.yml b/.github/workflows/tasks.yml
index 6b25d01..f1952fe 100644
--- a/.github/workflows/tasks.yml
+++ b/.github/workflows/tasks.yml
@@ -9,13 +9,11 @@ jobs:
strategy:
fail-fast: false
matrix:
- php: [ '7.4', '8.0', '8.1' ]
- typo3: [ '10', '11' ]
+ php: [ '8.0', '8.1', '8.2' ]
+ typo3: [ '11', '12' ]
exclude:
- php: '8.0'
- typo3: '10'
- - php: '8.1'
- typo3: '10'
+ typo3: '12'
steps:
- name: Setup PHP with PECL extension
uses: shivammathur/setup-php@v2
diff --git a/.gitignore b/.gitignore
index c34116b..0c7c416 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
vendor
public
composer.lock
+var/
diff --git a/Classes/Middleware/MinifyMiddleware.php b/Classes/Middleware/MinifyMiddleware.php
index 947bc3f..17a3480 100644
--- a/Classes/Middleware/MinifyMiddleware.php
+++ b/Classes/Middleware/MinifyMiddleware.php
@@ -20,7 +20,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
// minimize only html
$response = $handler->handle($request);
foreach ($response->getHeader('Content-Type') as $contentType) {
- if (strpos($contentType, 'text/html') !== 0) {
+ if (!str_starts_with($contentType, 'text/html')) {
return $response;
}
}
@@ -37,6 +37,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$body->write($html);
$response = $response->withBody($body);
}
+
return $response;
}
}
diff --git a/Classes/Service/MinifyService.php b/Classes/Service/MinifyService.php
index 932a8c4..9dfabe9 100644
--- a/Classes/Service/MinifyService.php
+++ b/Classes/Service/MinifyService.php
@@ -29,6 +29,7 @@ public function minify(string $html): string
$htmlMin->doRemoveOmittedQuotes($this->isFeatureActive('remove_omitted_quotes'));
$htmlMin->doRemoveOmittedHtmlTags($this->isFeatureActive('remove_omitted_html_tags'));
$htmlMin->doRemoveComments($this->isFeatureActive('remove_comments'));
+
$originalHtml = $html;
// Not nice but this is really hardcoded in the core.
@@ -36,9 +37,9 @@ public function minify(string $html): string
$typo3Comment = $this->preserveTypo3Comment($html);
$html = $htmlMin->minify($html);
$output = [];
- $languageMeta = preg_match_all('//', $html, $output);
+ $languageMeta = preg_match_all('##', $html, $output);
if ($languageMeta) {
- $insertAt = strpos($html, $output[0][0]) + strlen($output[0][0]);
+ $insertAt = strpos($html, (string)$output[0][0]) + strlen($output[0][0]);
$html = substr($html, 0, $insertAt) . $typo3Comment . substr($html, $insertAt);
} else {
$html = $htmlMin->minify($html);
@@ -48,8 +49,9 @@ public function minify(string $html): string
}
if (empty($html)) {
- $html = $originalHtml;
+ return $originalHtml;
}
+
return $html;
}
@@ -66,7 +68,7 @@ protected function preserveTypo3Comment(string $html): string
$typo3CommentStop = strpos($html, '-->', $typo3CommentStart);
$typo3Comment = substr($html, $typo3CommentStart, $typo3CommentStop - $typo3CommentStart + 3);
- if (strpos($typo3Comment, 'TYPO3') !== false) {
+ if (str_contains($typo3Comment, 'TYPO3')) {
return $typo3Comment;
}
diff --git a/Configuration/RequestMiddlewares.php b/Configuration/RequestMiddlewares.php
index 78a5bbe..58931ec 100644
--- a/Configuration/RequestMiddlewares.php
+++ b/Configuration/RequestMiddlewares.php
@@ -1,9 +1,11 @@
[
'minify/service/htmlminifier' => [
- 'target' => \Pluswerk\PlusMinify\Middleware\MinifyMiddleware::class,
+ 'target' => MinifyMiddleware::class,
// in the request direction it is after these middlewares:
// but in response direction it is before these middlewares:
'after' => [
diff --git a/composer.json b/composer.json
index 95b86dd..8ac9e56 100644
--- a/composer.json
+++ b/composer.json
@@ -17,28 +17,25 @@
"typo3/cms-composer-installers": true,
"typo3/class-alias-loader": true,
"phpro/grumphp": true,
- "pluswerk/grumphp-config": true
+ "pluswerk/grumphp-config": true,
+ "phpstan/extension-installer": true
},
"sort-packages": true
},
"extra" : {
- "typo3/cms" : {
- "extension-key" : "minify"
- },
- "pluswerk/grumphp-config": {
- "auto-setting": true
- },
- "grumphp": {
- "config-default-path": "vendor/pluswerk/grumphp-config/grumphp.yml"
+ "typo3/cms": {
+ "extension-key": "minify"
}
},
"require" : {
- "php": "~7.4 || ~8.0 || ~8.1",
+ "php": "~8.0 || ~8.1 || ~8.2",
"composer-runtime-api": "^2",
- "typo3/cms-core": "^10.4 || ^11.5",
- "voku/html-min": "^4"
+ "typo3/cms-core": "^11.5 || ^12.4",
+ "voku/html-min": "^4.5"
},
"require-dev": {
- "pluswerk/grumphp-config": "^5"
+ "pluswerk/grumphp-config": "^6",
+ "saschaegerer/phpstan-typo3": "^1.8.2",
+ "ssch/typo3-rector": "^1.1.3"
}
}
diff --git a/ext_emconf.php b/ext_emconf.php
index bbedd1a..31e2c71 100644
--- a/ext_emconf.php
+++ b/ext_emconf.php
@@ -1,5 +1,7 @@
'+Pluswerk: Minify',
@@ -8,14 +10,10 @@
'author' => 'Stefan Lamm',
'author_email' => 'stefan.lamm@pluswerk.ag',
'state' => 'stable',
- 'internal' => '',
- 'uploadfolder' => '0',
- 'createDirs' => '',
- 'clearCacheOnLoad' => false,
- 'version' => \Composer\InstalledVersions::getPrettyVersion('pluswerk/minify'),
+ 'version' => InstalledVersions::getPrettyVersion('pluswerk/minify'),
'constraints' => [
'depends' => [
- 'typo3' => '10.4.0 - 11.99.99',
+ 'typo3' => '11.5.0 - 12.99.99',
],
'conflicts' => [],
'suggests' => [],
diff --git a/grumphp.yml b/grumphp.yml
new file mode 100644
index 0000000..3a60a5a
--- /dev/null
+++ b/grumphp.yml
@@ -0,0 +1,16 @@
+imports:
+ - { resource: vendor/pluswerk/grumphp-config/grumphp.yml }
+parameters:
+ convention.process_timeout: 240
+ convention.security_checker_blocking: true
+ convention.jsonlint_ignore_pattern: { }
+ convention.xmllint_ignore_pattern: { }
+ convention.yamllint_ignore_pattern: { }
+ convention.phpcslint_ignore_pattern: { }
+ convention.phpcslint_exclude: { }
+ convention.xlifflint_ignore_pattern: { }
+ convention.rector_ignore_pattern: { }
+ convention.rector_enabled: true
+ convention.rector_config: rector.php
+ convention.rector_clear-cache: false
+ convention.phpstan_level: null
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
new file mode 100644
index 0000000..aab4991
--- /dev/null
+++ b/phpstan-baseline.neon
@@ -0,0 +1,2 @@
+parameters:
+ ignoreErrors: []
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 0000000..e178ba6
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,7 @@
+includes:
+ - phpstan-baseline.neon
+ - vendor/andersundsehr/phpstan-git-files/extension.php
+
+parameters:
+ level: 8
+ reportUnmatchedIgnoredErrors: false
diff --git a/rector.php b/rector.php
new file mode 100644
index 0000000..2da6bd0
--- /dev/null
+++ b/rector.php
@@ -0,0 +1,42 @@
+parallel();
+ $rectorConfig->importNames();
+ $rectorConfig->importShortClasses();
+ $rectorConfig->cacheClass(FileCacheStorage::class);
+ $rectorConfig->cacheDirectory('./var/cache/rector');
+
+ $rectorConfig->paths(
+ array_filter(explode("\n", (string)shell_exec("git ls-files | xargs ls -d 2>/dev/null | grep '\.php$'")))
+ );
+
+ // define sets of rules
+ $rectorConfig->sets(
+ [
+ ...RectorSettings::sets(true),
+ ...RectorSettings::setsTypo3(false),
+ ]
+ );
+
+ // remove some rules
+ // ignore some files
+ $rectorConfig->skip(
+ [
+ ...RectorSettings::skip(),
+ ...RectorSettings::skipTypo3(),
+
+ /**
+ * rector should not touch these files
+ */
+ //__DIR__ . '/src/Example',
+ //__DIR__ . '/src/Example.php',
+ ]
+ );
+};