. */ namespace SP\Html; use SP\Domain\Html\Header; use SP\Domain\Html\MinifyFile; use SP\Infrastructure\File\FileException; use SplObjectStorage; /** * Class MinifyJs */ final class MinifyJs extends Minify { /** * @param SplObjectStorage $files * @return string * @throws FileException */ protected function minify(SplObjectStorage $files): string { $data = ''; foreach ($files as $file) { $data .= sprintf('%s/* MINIFIED FILE: %s */%s', PHP_EOL, $file->getName(), PHP_EOL); if ($file->needsMinify()) { $data .= $this->jsCompress($file->getContent()); } else { $data .= $file->getContent(); } } return $data; } /** * Comprimir código javascript. * * @param string $buffer código a comprimir * * @return string */ private function jsCompress(string $buffer): string { $regexReplace = [ '#/\*[^*]*\*+([^/][^*]*\*+)*/#', '#^[\s\t]*//.*$#m', '#[\s\t]+$#m', '#^[\s\t]+#m', '#\s*//\s.*$#m' ]; return str_replace(["\r\n", "\r", "\n", "\t"], '', preg_replace($regexReplace, '', $buffer)); } protected function getContentTypeHeader(): string { return Header::CONTENT_TYPE_JS->value; } }