1
0
mirror of https://github.com/mrclay/minify.git synced 2025-09-15 08:22:13 +02:00

14 Commits

Author SHA1 Message Date
Steve Clay
45463786f8 Merge pull request #709 from mrclay/docker
Updates
2024-01-04 01:08:48 -05:00
Steve Clay
00e5e20abe Changelog update 2024-01-04 01:08:31 -05:00
Steve Clay
9e182a6255 Use scssphp/scssphp 2024-01-04 01:00:44 -05:00
Steve Clay
bc1ffdc5fc Test fixes 2024-01-04 01:00:44 -05:00
Steve Clay
aa3721156e Require PHP 8.1. Fixes #708 2024-01-04 01:00:35 -05:00
Steve Clay
3047f5c48f Add docker-compose setup 2024-01-03 21:41:47 -05:00
Elan Ruusamäe
104ccd2bfe Update .semver file 2023-05-05 15:03:33 +03:00
Elan Ruusamäe
dc02cdfba7 Fill changelog for 3.0.14 2023-05-05 15:03:06 +03:00
Elan Ruusamäe
23f055d3f5 Merge pull request #705 from rossbearman/monolog-v3 2023-04-13 23:03:05 +03:00
Ross Bearman
4970127e91 Support monolog v3 2023-04-12 16:11:35 +01:00
Elan Ruusamäe
39c37bdd8c Merge pull request #700 from turbulent/feat/allow-invalidation 2022-12-15 12:42:05 +02:00
Adrien Poupa
4a9d0595e3 feat: Allow invalidation from manual invocation 2022-12-14 15:21:52 -05:00
Elan Ruusamäe
ca8fdc6fdd Merge pull request #699 from tamakianimalife/php8.2
Add property declaration
2022-12-14 20:52:27 +02:00
tamakianimalife
8c69866874 Add property declaration 2022-12-14 17:30:53 +09:00
23 changed files with 135 additions and 82 deletions

View File

@@ -1,6 +1,6 @@
---
:major: 3
:minor: 0
:patch: 11
:patch: 14
:special: ''
:metadata: ''

View File

@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
## [4.0.0] - 2024-01-04
- Support PHP 8.1+
- Update PHPUnit to 8.x
- Replace `leafo/scssphp` with `scssphp/scssphp`
## [3.0.14] - 2023-05-05
- Support monolog v3, [#705]
- Allow invalidation from manual invocation, [#700]
- Add property declaration, [#699]
[3.0.14]: https://github.com/mrclay/minify/compare/3.0.13...3.0.14
[#705]: https://github.com/mrclay/minify/pull/705
[#700]: https://github.com/mrclay/minify/pull/700
[#699]: https://github.com/mrclay/minify/pull/699
## [3.0.13] - 2022-10-03
- Add `Minify_Cache_APCu` to replace `Minify_Cache_APC`, [#697]

View File

@@ -17,32 +17,36 @@
"wiki": "https://github.com/mrclay/minify/blob/master/docs"
},
"autoload": {
"classmap": ["lib/"]
"classmap": [
"lib/"
]
},
"autoload-dev": {
"psr-4": {"Minify\\Test\\": "tests/"}
"psr-4": {
"Minify\\Test\\": "tests/"
}
},
"config": {
"platform": {
"php": "5.3.29"
"php": "8.1.0"
},
"sort-packages": true
},
"require": {
"php": "^5.3.0 || ^7.0 || ^8.0",
"php": "^8.1",
"ext-pcre": "*",
"intervention/httpauth": "^2.0|^3.0",
"marcusschwarz/lesserphp": "^0.5.5",
"monolog/monolog": "~1.1|~2.0",
"monolog/monolog": "~1.1|~2.0|~3.0",
"mrclay/jsmin-php": "~2",
"mrclay/props-dic": "^2.2|^3.0",
"mrclay/props-dic": "^4",
"tubalmartin/cssmin": "~4"
},
"require-dev": {
"firephp/firephp-core": "~0.4.0",
"leafo/scssphp": "^0.3 || ^0.6 || ^0.7",
"meenie/javascript-packer": "~1.1",
"phpunit/phpunit": "^4.8.36",
"phpunit/phpunit": "^8",
"scssphp/scssphp": "^1.12",
"tedivm/jshrink": "~1.1.0"
},
"suggest": {

8
docker-compose.yml Normal file
View File

@@ -0,0 +1,8 @@
version: "3.7"
services:
apache:
image: php:8.3-apache
ports:
- 8080:80
volumes:
- .:/var/www/html/min

View File

@@ -118,6 +118,7 @@ class Minify
'quiet' => false, // serve() will send headers and output
'debug' => false,
'concatOnly' => false,
'invalidate' => false,
// if you override these, the response codes MUST be directly after
// the first space.
@@ -284,6 +285,7 @@ class Minify
'lastModifiedTime' => $this->options['lastModifiedTime'],
'isPublic' => $this->options['isPublic'],
'encoding' => $this->options['encodeMethod'],
'invalidate' => $this->options['invalidate'],
);
if ($this->options['maxAge'] > 0) {

View File

@@ -122,7 +122,7 @@ class App extends Container
$type = $that->typeOf($ctrl);
throw new RuntimeException('$min_factories["controller"] callable must return an implementation'
." of Minify_CacheInterface. Returned $type");
. " of Minify_CacheInterface. Returned $type");
};
$this->docRoot = function (App $app) {
@@ -188,7 +188,7 @@ class App extends Container
$type = $that->typeOf($value);
throw new RuntimeException('If set, $min_errorLogger must be a PSR-3 logger or a Monolog handler.'
." Given $type");
. " Given $type");
};
$this->minify = function (App $app) use ($that) {
@@ -205,7 +205,7 @@ class App extends Container
$type = $that->typeOf($minify);
throw new RuntimeException('$min_factories["minify"] callable must return a Minify object.'
." Returned $type");
. " Returned $type");
};
$this->serveOptions = function (App $app) {
@@ -232,7 +232,7 @@ class App extends Container
}
// check for URI versioning
if ($env->get('v') !== null || preg_match('/&\\d/', $app->env->server('QUERY_STRING'))) {
if ($env->get('v') !== null || preg_match('/&\\d/', $app->env->server('QUERY_STRING') ?? '')) {
$ret['maxAge'] = 31536000;
}

View File

@@ -188,7 +188,7 @@ class Minify_ClosureCompiler
*/
protected function checkTempdir($tempDir)
{
if (!is_dir($tempDir)) {
if ($tempDir === null || !is_dir($tempDir)) {
throw new Minify_ClosureCompiler_Exception('$tempDir(' . $tempDir . ') is not a valid direcotry.');
}
if (!is_writable($tempDir)) {

View File

@@ -22,6 +22,11 @@ class Minify_HTML
* @var boolean
*/
protected $_jsCleanComments = true;
/**
* @var string
*/
protected $_html;
/**
* "Minify" an HTML page

View File

@@ -1,7 +1,6 @@
<?php
use Leafo\ScssPhp\Compiler;
use Leafo\ScssPhp\Server;
use Leafo\ScssPhp\Version;
use ScssPhp\ScssPhp\Compiler;
use ScssPhp\ScssPhp\Version;
/**
* Class for using SCSS files
@@ -152,12 +151,12 @@ class Minify_ScssCssSource extends Minify_Source
// and will treat the @import line as css import
$scss->setImportPaths(dirname($filename));
$css = $scss->compile(file_get_contents($filename), $filename);
$css = $scss->compileString(file_get_contents($filename), $filename)->getCss();
$elapsed = round((microtime(true) - $start), 4);
$v = Version::VERSION;
$ts = date('r', $start);
$css = "/* compiled by scssphp $v on $ts (${elapsed}s) */\n\n" . $css;
$ts = date('r', (int) $start);
$css = "/* compiled by scssphp $v on $ts ({$elapsed}s) */\n\n" . $css;
$imports = $scss->getParsedFiles();

View File

@@ -113,10 +113,12 @@ class HTTPEncoderTest extends TestCase
);
foreach ($encodingTests as $test) {
$e = new HTTP_Encoder(array(
'content' => $variedContent,
'method' => $test['method'],
));
$e = new HTTP_Encoder(
array(
'content' => $variedContent,
'method' => $test['method'],
)
);
$e->encode(9);
$ret = $this->countBytes($e->getContent());
@@ -153,12 +155,12 @@ function _gzdecode($data)
}
// http://www.php.net/manual/en/function.gzdecode.php#82930
function _phpman_gzdecode($data, &$filename='', &$error='', $maxlength=null)
function _phpman_gzdecode($data, &$filename = '', &$error = '', $maxlength = 0)
{
$mbIntEnc = null;
$hasMbOverload = (function_exists('mb_strlen')
&& (ini_get('mbstring.func_overload') !== '')
&& ((int)ini_get('mbstring.func_overload') & 2));
&& (ini_get('mbstring.func_overload') !== '')
&& ((int) ini_get('mbstring.func_overload') & 2));
if ($hasMbOverload) {
$mbIntEnc = mb_internal_encoding();
mb_internal_encoding('8bit');
@@ -174,7 +176,7 @@ function _phpman_gzdecode($data, &$filename='', &$error='', $maxlength=null)
return null; // Not GZIP format (See RFC 1952)
}
$method = ord(substr($data, 2, 1)); // Compression method
$flags = ord(substr($data, 3, 1)); // Flags
$flags = ord(substr($data, 3, 1)); // Flags
if ($flags & 31 != $flags) {
$error = "Reserved bits not allowed.";
if ($mbIntEnc !== null) {
@@ -185,11 +187,11 @@ function _phpman_gzdecode($data, &$filename='', &$error='', $maxlength=null)
// NOTE: $mtime may be negative (PHP integer limitations)
$mtime = unpack("V", substr($data, 4, 4));
$mtime = $mtime[1];
$xfl = substr($data, 8, 1);
$os = substr($data, 8, 1);
$xfl = substr($data, 8, 1);
$os = substr($data, 8, 1);
$headerlen = 10;
$extralen = 0;
$extra = "";
$extralen = 0;
$extra = "";
if ($flags & 4) {
// 2-byte length prefixed EXTRA data in header
if ($len - $headerlen - 2 < 8) {
@@ -276,7 +278,7 @@ function _phpman_gzdecode($data, &$filename='', &$error='', $maxlength=null)
$isize = unpack("V", substr($data, -4));
$isize = $isize[1];
// decompression:
$bodylen = $len-$headerlen-8;
$bodylen = $len - $headerlen - 8;
if ($bodylen < 1) {
// IMPLEMENTATION BUG!
if ($mbIntEnc !== null) {
@@ -288,20 +290,20 @@ function _phpman_gzdecode($data, &$filename='', &$error='', $maxlength=null)
$data = "";
if ($bodylen > 0) {
switch ($method) {
case 8:
// Currently the only supported compression method:
$data = gzinflate($body, $maxlength);
break;
default:
$error = "Unknown compression method.";
if ($mbIntEnc !== null) {
mb_internal_encoding($mbIntEnc);
}
return false;
case 8:
// Currently the only supported compression method:
$data = gzinflate($body, $maxlength);
break;
default:
$error = "Unknown compression method.";
if ($mbIntEnc !== null) {
mb_internal_encoding($mbIntEnc);
}
return false;
}
} // zero-byte body content is allowed
// Verifiy CRC32
$crc = sprintf("%u", crc32($data));
$crc = sprintf("%u", crc32($data));
$crcOK = $crc == $datacrc;
$lenOK = $isize == strlen($data);
if (!$lenOK || !$crcOK) {

View File

@@ -6,7 +6,9 @@ use Minify_HTML_Helper;
class LessSourceTest extends TestCase
{
public function setUp()
public string $realDocRoot;
public function setUp(): void
{
$this->realDocRoot = $_SERVER['DOCUMENT_ROOT'];
$_SERVER['DOCUMENT_ROOT'] = self::$document_root;

View File

@@ -6,7 +6,7 @@ use Minify_CSS_UriRewriter;
class MinifyCSSUriRewriterTest extends TestCase
{
public function setUp()
public function setUp(): void
{
Minify_CSS_UriRewriter::$debugText = '';
}

View File

@@ -6,7 +6,7 @@ use Minify_Cache_APC;
class MinifyCacheAPCTest extends TestCase
{
public function setUp()
public function setUp(): void
{
if (!function_exists('apc_store')) {
$this->markTestSkipped("To test this component, install APC extension");

View File

@@ -6,7 +6,7 @@ use Minify_Cache_APCu;
class MinifyCacheAPCuTest extends TestCase
{
public function setUp()
public function setUp(): void
{
if (!function_exists('apcu_store')) {
$this->markTestSkipped("To test this component, install APCu extension");

View File

@@ -10,7 +10,7 @@ class MinifyCacheMemcacheTest extends TestCase
/** @var Memcache */
private $mc;
public function setUp()
public function setUp(): void
{
if (!function_exists('memcache_set')) {
$this->markTestSkipped("To test this component, install memcache in PHP");

View File

@@ -6,7 +6,7 @@ use Minify_Cache_WinCache;
class MinifyCacheWinCacheTest extends TestCase
{
public function setUp()
public function setUp(): void
{
if (!function_exists('wincache_ucache_info')) {
$this->markTestSkipped("To test this component, install WinCache extension");

View File

@@ -6,7 +6,7 @@ use Minify_Cache_ZendPlatform;
class MinifyCacheZendPlatformTest extends TestCase
{
public function setUp()
public function setUp(): void
{
if (!function_exists('output_cache_put')) {
// FIXME: be specific what to actually install

View File

@@ -7,7 +7,7 @@ use Minify_ClosureCompiler;
class MinifyClosureCompilerTest extends TestCase
{
public static function setupBeforeClass()
public static function setupBeforeClass(): void
{
parent::setupBeforeClass();
Minify_ClosureCompiler::$isDebug = true;

View File

@@ -9,14 +9,14 @@ class MinifyHTMLHelperTest extends TestCase
{
private $realDocRoot;
public function setUp()
public function setUp(): void
{
$this->realDocRoot = $_SERVER['DOCUMENT_ROOT'];
$_SERVER['DOCUMENT_ROOT'] = self::$document_root;
}
// TODO: this is probably not needed if backupGlobals is enabled?
public function tearDown()
public function tearDown(): void
{
$_SERVER['DOCUMENT_ROOT'] = $this->realDocRoot;
}
@@ -43,13 +43,16 @@ class MinifyHTMLHelperTest extends TestCase
$this->assertEquals($expected, $actual, 'non-existent group & debug');
$expected = "/myApp/min/?g=css&amp;{$maxTime}";
$actual = Minify_HTML_Helper::getUri('css', array(
'rewriteWorks' => false
,
'minAppUri' => '/myApp/min/'
,
'groupsConfigFile' => self::$test_files . '/htmlHelper_groupsConfig.php'
));
$actual = Minify_HTML_Helper::getUri(
'css',
array(
'rewriteWorks' => false
,
'minAppUri' => '/myApp/min/'
,
'groupsConfigFile' => self::$test_files . '/htmlHelper_groupsConfig.php'
)
);
$this->assertEquals($expected, $actual, 'existing group');
@@ -58,25 +61,32 @@ class MinifyHTMLHelperTest extends TestCase
require_once $utilsFile;
$fiveSecondsAgo = $_SERVER['REQUEST_TIME'] - 5;
$obj = new Minify_Source(array(
'id' => '1',
'content' => '1',
'lastModified' => $fiveSecondsAgo,
));
$obj = new Minify_Source(
array(
'id' => '1',
'content' => '1',
'lastModified' => $fiveSecondsAgo,
)
);
$output = Minify_mtime(array($uri1, $uri2, $obj));
$this->assertEquals($fiveSecondsAgo, $output, 'utils.php : Minify_mtime w/ files & obj');
$obj = new Minify_Source(array(
'id' => '2',
'content' => '2',
'lastModified' => strtotime('2000-01-01'),
));
$output = Minify_mtime(array(
$obj
,
'css'
), self::$test_files . '/htmlHelper_groupsConfig.php');
$obj = new Minify_Source(
array(
'id' => '2',
'content' => '2',
'lastModified' => strtotime('2000-01-01'),
)
);
$output = Minify_mtime(
array(
$obj
,
'css'
),
self::$test_files . '/htmlHelper_groupsConfig.php'
);
$this->assertEquals($maxTime, $output, 'utils.php : Minify_mtime w/ obj & group');
}
}

View File

@@ -8,7 +8,7 @@ use Minify_NailgunClosureCompiler;
class MinifyNailgunClosureCompilerTest extends TestCase
{
public static function setupBeforeClass()
public static function setupBeforeClass(): void
{
parent::setupBeforeClass();
Minify_ClosureCompiler::$isDebug = true;

View File

@@ -7,7 +7,7 @@ use Minify_YUICompressor;
class MinifyYuiCSSTest extends TestCase
{
public static function setupBeforeClass()
public static function setupBeforeClass(): void
{
parent::setupBeforeClass();
@@ -18,7 +18,7 @@ class MinifyYuiCSSTest extends TestCase
Minify_YUICompressor::$tempDir = sys_get_temp_dir();
}
public function setUp()
public function setUp(): void
{
$this->assertHasJar();
}

View File

@@ -6,7 +6,9 @@ use Minify_HTML_Helper;
class ScssSourceTest extends TestCase
{
public function setUp()
public string $realDocRoot;
public function setUp(): void
{
$this->realDocRoot = $_SERVER['DOCUMENT_ROOT'];
$_SERVER['DOCUMENT_ROOT'] = self::$document_root;

View File

@@ -11,7 +11,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
/** @var string */
protected static $test_files;
public static function setupBeforeClass()
public static function setupBeforeClass(): void
{
self::$document_root = __DIR__;
self::$test_files = __DIR__ . '/_test_files';
@@ -25,7 +25,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
*/
protected function countBytes($str)
{
return (function_exists('mb_strlen') && ((int)ini_get('mbstring.func_overload') & 2))
return (function_exists('mb_strlen') && ((int) ini_get('mbstring.func_overload') & 2))
? mb_strlen($str, '8bit')
: strlen($str);
}