public function compressJs(array $assets, $targetPath)
{
$oFile = $targetPath;
$files = [];
$md5String = '';
$newestMTime = 0;
foreach ($assets as $assetPath) {
$path = $this->jarves->resolveWebPath($assetPath);
$files[] = '--js ' . escapeshellarg($path);
$mtime = filemtime($path);
$newestMTime = max($newestMTime, $mtime);
$md5String .= ">{$path}.{$mtime}<";
}
$sourceMap = $oFile . '.map';
$cmdTest = 'java -version 2>&1';
$closure = 'vendor/google/closure-compiler/compiler.jar';
$compiler = escapeshellarg(realpath('../' . $closure));
$cmd = 'java -jar ' . $compiler . ' --js_output_file ' . escapeshellarg('web/' . $oFile);
$returnVal = 0;
$debugMode = false;
$handle = @fopen($oFile, 'r');
$fileUpToDate = false;
$md5Line = '//' . md5($md5String) . "\n";
if ($handle) {
$line = fgets($handle);
fclose($handle);
if ($line === $md5Line) {
$fileUpToDate = true;
}
}
if ($fileUpToDate) {
return true;
} else {
if (!$debugMode) {
exec($cmdTest, $outputTest, $returnVal);
}
if (0 === $returnVal) {
$cmd .= ' --create_source_map ' . escapeshellarg('web/' . $sourceMap);
$cmd .= ' --source_map_format=V3';
$cmd .= ' ' . implode(' ', $files);
$cmd .= ' 2>&1';
$output = [];
exec($cmd, $output, $returnVal);
if (0 === $returnVal) {
// if (false === strpos($output, 'ERROR - Parse error')) {
$content = file_get_contents('web/' . $oFile);
$sourceMapUrl = '//@ sourceMappingURL=' . basename($sourceMap);
$content = $md5Line . $content . $sourceMapUrl;
file_put_contents('web/' . $oFile, $content);
return true;
// }
}
}
$content = '';
foreach ($assets as $assetPath) {
$content .= "\n/* {$assetPath} */\n\n";
$path = $this->jarves->resolveWebPath($assetPath);
$content .= file_get_contents($path);
}
if ($content) {
$this->webFilesystem->write($oFile, $content);
return true;
}
return false;
}
}